Java >> Java tutorial >  >> Tag >> java.util

Hibernate Tips:Sådan tilknyttes en java.util.Date til en databasekolonne

Hibernate Tips er en række indlæg, hvor jeg beskriver en hurtig og nem løsning på almindelige Hibernate-spørgsmål. Hvis du har et spørgsmål, som du gerne vil have mig til at svare på, bedes du efterlade en kommentar nedenfor.

Spørgsmål:

Jeg bruger en java.util.Date for at bevare en dato som en enhedsattribut.
Men Hibernate kortlægger det til et tidsstempel med nanosekunder. Hvordan kan jeg ændre kortlægningen, så Hibernate kun gemmer år, måneder og dage?

Løsning:

SQL-standarden understøtter tre forskellige datatyper til at gemme oplysninger om dato og klokkeslæt. Hibernate kan tilknytte dem alle til en java.util.Date eller en java.util.Calendar . Du skal beslutte, hvilken af ​​følgende SQL-typer Hibernate skal bruge:

  • TIMESTAMP :Vedvarer dato og klokkeslæt med nanosekunder. Hibernate bruger denne type som standard.
  • TID :Gemmer kun tidspunktet på dagen uden nanosekunder.
  • DATO :Vedvarer kun datoen med år, måneder og dage.

Du kan definere den foretrukne tilknytning med @Temporal anmærkning. Som du kan se i det følgende kodestykke, kræver det en TemporalType enum som en værdi. Enumet giver dig mulighed for at vælge SQL-typen (DATE , TID eller TIMESTAMP ), som du vil bruge.

@Entity
public class Author {

	@Temporal(TemporalType.DATE)
	private Date dateOfBirth;
	...
}

Som du kan se i følgende logoutput, er fødselsdatoen attribut for Author enhed bliver knyttet til en SQL DATE uden tidsoplysninger.

07:22:50,453 DEBUG [org.hibernate.SQL] -
    select
        author0_.id as id1_0_0_,
        author0_.dateOfBirth as dateOfBi2_0_0_,
        author0_.firstName as firstNam3_0_0_,
        author0_.lastName as lastName4_0_0_,
        author0_.version as version5_0_0_
    from
        Author author0_
    where
        author0_.id=?
07:22:50,454 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [1] as [BIGINT] - [1]
07:22:50,464 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([dateOfBi2_0_0_] : [DATE]) - [1980-01-01]
07:22:50,465 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([firstNam3_0_0_] : [VARCHAR]) - [John]
07:22:50,465 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([lastName4_0_0_] : [VARCHAR]) - [Doe]
07:22:50,466 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([version5_0_0_] : [INTEGER]) - [0]

Få flere oplysninger:

Siden Hibernate 5 kan du også bruge klasserne Java 8's Date and Time API som enhedsattributtyper. De nye klasser løser mange problemer med java.util.Date og give alle oplysninger, som Hibernate har brug for for at tilknytte dem til de korrekte JDBC-typer.
Jeg forklarer kortlægningen af ​​Date and Time API-klasserne i flere detaljer i:Hibernate 5:hvordan man fortsætter LocalDateTime og Co med Hibernate.


Dvaletipsbog







Få flere opskrifter som denne i min nye bog Hibernate Tips:Mere end 70 løsninger på almindelige dvaleproblemer.

Den giver dig mere end 70 klar-til-brug opskrifter til emner som grundlæggende og avancerede kortlægninger, logning, Java 8-understøttelse, caching og statisk og dynamisk definerede forespørgsler.

Få det nu!



Java tag