无法使用@Temporal
的{{1}}来编译代码。
实体代码
LocalDate
转换器代码
...
@Temporal(TemporalType.DATE)
private LocalDate creationDate;
public LocalDate getCreationDate() {
return this.creationDate;
}
public void setCreationDate(LocalDate creationDate) {
this.creationDate = creationDate;
}
...
persistence.xml
@Converter(autoApply=true)
public class DateConverter implements AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate localDate) {
return (localDate == null) ? null : Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
@Override
public LocalDate convertToEntityAttribute(Date date) {
return (date==null) ? null : Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
}
}
环境
Eclipse编译错误(在...
<persistence-unit name="HR">
<class>test.Employee</class>
<class>test.DateConverter</class>
</persistence-unit>
...
注释行中,在实体代码中):
“时间”类型的持久字段或属性必须为类型 java.util.Date,java.util.Calendar或java.util.GregorianCalendar
删除@Temporal
可以正常编译。 Java8中的日期和时间类别(@Temporal
)不需要吗?
请帮助解决问题,谢谢。
答案 0 :(得分:2)
新的@Temporal
类包不需要java.time
批注。 java.util.Date
之所以需要它,是因为“日期”是对一种“万事通”解决方案的尝试,只会使情况变得更糟。
您也不需要转换器。