我有以下类描述片段:
...
@Column(name = "invalidate_token_date")
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime invalidateTokenDate;
....
Run Code Online (Sandbox Code Playgroud)
此代码不起作用,因为@Temporal不支持LocalDateTime.我看到的建议如何使用LocalDateTime从乔达时间,但我使用Java 8.
请给我一些建议.
PS
这是我目前的JPA依赖:
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud) 我想在我的JPA应用程序中添加对Java 8 Date/Time API(JSR-310)的支持.
很明显,JPA 2.1 不支持Java 8 Date/Time API.
作为一种解决方法,最常见的建议是使用AttributeConverter.
在我现有的应用程序中,我将实体更改为使用LocalDate/ LocalDateTimetypes作为列映射字段,并为其添加了旧的setter/getter java.util.Date.
我创建了相应的AttributeConverter类.
我的应用程序现在无法使用时,Query.setParameter()用java.util.Date实例(它过渡到新的API工作之前).
似乎JPA期望新的日期类型并且不会动态转换它.
我希望如果将参数传递给已注册setParameter()的类型AttributeConverter,它将由转换器自动转换.但似乎并非如此,至少不使用EclipseLink 2.6.2:
java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.Date for parameter closeDate with expected type of class java.time.LocalDate from query string SELECT obj FROM [...]
at org.eclipse.persistence.internal.jpa.QueryImpl.setParameterInternal(QueryImpl.java:937) ~[eclipselink-2.6.2.jar:2.6.2.v20151217-774c696]
at …Run Code Online (Sandbox Code Playgroud)