相关疑难解决方法(0)

Java 8 LocalDateTime和Hibernate 4

我有以下类描述片段:

... 
@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)

hibernate date java-8

18
推荐指数
4
解决办法
2万
查看次数

JPA 2.1:Java 8日期/时间API简介

我想在我的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)

java hibernate jpa eclipselink jpa-2.1

10
推荐指数
1
解决办法
2534
查看次数

标签 统计

hibernate ×2

date ×1

eclipselink ×1

java ×1

java-8 ×1

jpa ×1

jpa-2.1 ×1