2017-10-10 58 views
0

如何爲我的POJO使用Date庫?如何在Hibernate/JPA中使用Java 8 Date庫?

@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; 

} 

我使用java.time.LocalDate類型:

我可以用這個我的代碼。

+1

ERRM,JPA 2.2的它的作用。您的提供商不支持JPA 2.2嗎? – DN1

+0

對於Hibernate,請參閱[第二個答案](https://stackoverflow.com/a/33001846/5221149)重複鏈接。 – Andreas

回答

1

現在的Hibernate/JPA不具備Java 8日期庫的兼容性,但你只需要做出AttributeConverter使用這個庫:

對於類型TIMESTAMP你可以使用這個轉換器:

@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(); 
    } 

} 

對於類型DATE你可以使用這個轉換器:

@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(); 
    } 

} 

對於類型TIME你可以使用這個轉換器:

@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(); 
    } 

}