2017-10-10 5 views
0

Comment puis-je utiliser la bibliothèque de dates pour mon POJO?Comment utiliser la bibliothèque de date Java 8 avec Hibernate/JPA?

je peux utiliser ce mon code:

@Data 
@Entity 
@Table(name = "PERSON") 
public class Person implements Serializable { 

    private static final long serialVersionUID = -8041031461422721556L; 

    @Id 
    @Column(name = "PERSON_ID") 
    private Long id; 

    @Column(name = "NAME") 
    private String name; 

    @Column(name = "DOB") 
    private LocalDate dob; 

} 

J'utilise le type java.time.LocalDate.

+1

ERRM, sa part de JPA 2.2. Votre fournisseur ne prend-il pas encore en charge JPA 2.2? – DN1

+0

Pour Hibernate, voir [deuxième réponse] (https://stackoverflow.com/a/33001846/5221149) de lien en double. – Andreas

Répondre

1

ont En ce moment Hibernate/JPA ne pas la compatibilité avec Java 8 bibliothèque Date, mais vous avez seulement besoin faire une AttributeConverter utiliser cette bibliothèque:

Pour le type TIMESTAMP vous pouvez utiliser ce convertisseur:

@Converter(autoApply = true) 
public class LocalDateTimeAttributeConverter implements AttributeConverter<LocalDateTime, Timestamp> { 

    @Override 
    public Timestamp convertToDatabaseColumn(LocalDateTime datetime) { 
     return datetime == null ? null : Timestamp.valueOf(datetime); 
    } 

    @Override 
    public LocalDateTime convertToEntityAttribute(Timestamp timestamp) { 
     return timestamp == null ? null : timestamp.toLocalDateTime(); 
    } 

} 

Pour le type DATE vous pouvez utiliser ce convertisseur:

@Converter(autoApply = true) 
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> { 

    @Override 
    public Date convertToDatabaseColumn(LocalDate date) { 
     return date == null ? null : Date.valueOf(date); 
    } 

    @Override 
    public LocalDate convertToEntityAttribute(Date date) { 
     return date == null ? null : date.toLocalDate(); 
    } 

} 

Pour le type TIME vous pouvez utiliser ce convertisseur:

@Converter(autoApply = true) 
public class LocalTimeAttributeConverter implements AttributeConverter<LocalTime, Time> { 

    @Override 
    public Time convertToDatabaseColumn(LocalTime time) { 
     return time == null ? null : Time.valueOf(time); 
    } 

    @Override 
    public LocalTime convertToEntityAttribute(Time time) { 
     return time == null ? null : time.toLocalTime(); 
    } 

}