如何使用 java.time.LocalDate 使用 Hibernate 5 和 Vaadin 8?

How use java.time.LocalDate using Hibernate5 and Vaadin8?

我是 Vaadin 的新手,我正在尝试做一个简单的 crud 应用程序。 我是从 Vaadin CRUD 示例开始的;然后我修改后端项目以使用 Hibernate 和 ui 项目来管理各种表。 我可以为 varchar 和 int 这样的简单数据类型做到这一点,现在我要添加一个日期字段,但它 returns 我这个错误:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '\xAC\xED\x00\x05sr\x00\x0Djava.time.Ser\x95]\x84\xBA\x1B"H\xB2\x0C\x00\x00xpw\x07\x03\x00\x00\x07\xE1\x06\x1Ax' for column 'data_nascita' at row 1

"DATA_NASCITA" 是我的 mysql 数据库中的一个日期列,该实体有一个链接到该字段的 LocalDate。

我在某处发现这个新的 java api 仅与 Hibernate5 兼容,所以在我的 pom 文件中添加:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.2.10.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>5.1.0.Final</version>
</dependency>

并进入实体 class 我将 java.util.Date 替换为 java.time.LocalDate 并删除注释 @temporal。 该字段的输入class是Vaadin框架的DateField。

可能是哪个问题?

P.S.: 我是瞎子,所以我用 Netbeans8 编译代码,但我用 notepad++ 修改了代码,所以,如果有人使用相同的技术并且没有任何问题,请告诉我因为我不能确定问题出在 build 进程上。

如果 你的 hibernate 版本大于 5.2.+ 你可以使用下面的列:

@Column
private LocalDate date;

否则您需要将hibernate-java8模块安装到您的项目中。

另一方面,如果 hibernate 版本 >= 5.2,你不应该将 hibernate-java8 模块安装到你的项目中,这可能会产生一些冲突,因为 hibernate-java8模块合并到休眠中。