我有一个域对象,其属性如下,在表单提交时,只有completionDate从表单输入绑定,而dateRaised为null。除验证错误外没有错误。我尝试将dateRaised类型更改为java.time.LocalDate,它工作正常。是否已经支持绑定到java.time.LocalDateTime?
@NotNull
@Column(name = "date_raised", nullable = false)
@DateTimeFormat(iso = ISO.DATE_TIME)
private java.time.LocalDateTime dateRaised;
@Column(name = "completion_date")
@DateTimeFormat(iso = ISO.DATE)
private java.time.LocalDate completionDate;
答案 0 :(得分:0)
您需要实施AttributeConverter<EntityType, DatabaseType>
来转换日期。
Thoughts on Java之后的以下博客Thorben Janssen解释了如何在LocalDate
列中存储DATE
属性或在{{1}中存储LocalDateTime
列。
How to persist LocalDate and LocalDateTime with JPA
JPA 2.1在 Java 8之前发布,因此不支持新的日期和时间API。如果您想使用新类(以正确的方式),您需要自己定义转换为
TIMESTAMP
和java.sql.Date
。这可以通过实现java.sql.Timestamp
接口并使用AttributeConverter<EntityType, DatabaseType>
注释类来轻松完成。通过设置@Converter(autoApply=true)
,转换器将应用于autoApply=true
的所有属性,并且不需要对实体进行任何更改。EntityType
属性的转换对开发人员透明,
@Converter(autoApply = true) public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> { @Override public Date convertToDatabaseColumn(LocalDate locDate) { return (locDate == null ? null : Date.valueOf(locDate)); } @Override public LocalDate convertToEntityAttribute(Date sqlDate) { return (sqlDate == null ? null : sqlDate.toLocalDate()); } }
属性可以用作任何其他实体属性。例如,您可以将它用作查询参数。LocalDate