sql-server - Hibernate 在 SQL Server 中将 Java 8 DateTimeLocal 保留为 VARBINARY

标签 sql-server jpa java-8 hibernate-5.x

我正在尝试在一个由 SQL Server 数据库支持的新应用程序中使用 Java 8 日期和时间 API。 Internet 上的所有资源都指出 Hibernate 5.2+ 开箱即用地支持此 API 和 Java 8,并建议一种简单的方法,如:

@Entity
@Table(name="...", schema="...")
public class DepositDetails {

    // ... id, other fields ...

    private LocalDateTime createdOn;

    // ... other fields, getters/setters ...

}

然而,在我的例子中,在数据库中创建的列(使用 hibernate-jpamodelgen )创建为 VARBINARY(255) 而不是 DATETIME/DATETIME2。
我也尝试过明确指定数据类型 (columnDefinition = "DATETIME") - 在这种情况下,列类型是按照指定正确创建的,但是当我尝试在表中保留数据时,我得到一个异常,指出 varbinary 数据不能转换为日期时间...

有关可能与问题相关的应用程序设置的更多详细信息:

  • Hibernate 是 5.2.12.Final
  • SQL Server 是 Microsoft SQL Server Developer Edition(64 位)14.0.900.75(在 Docker 容器中)
  • MSSQL JDBC 驱动程序是 6.2.2.jre8

最佳答案

问题是,正如@Alan Hay 所建议的那样,Hibernate 5.2 在依赖关系树中被 Hibernate 5.0 取代,Hibernate 5.0 被 Spring Boot 默认使用。
此外,我在子 pom.xml 中有一个属性设置为 5.2.12.Final,但在父级别上,相同的属性(再次由 Spring Boot)设置为 5.0.x。这样,本应从子模块中获取 5.2 依赖项的父应用程序实际上从 Spring Boot 中获取了旧版本。
解决方案是在父 pom.xml 中设置属性。

关于sql-server - Hibernate 在 SQL Server 中将 Java 8 DateTimeLocal 保留为 VARBINARY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46983107/

相关文章:

java - 多线程如何破坏Hashmap的内部结构

sql-server - 如何按字母顺序对字符串进行排序

sql - 这是一个非规范化的表吗?

java - 如何在 JPA 应用程序中进行定期数据库清理?

java - JPA与同一实体的双重关系

java - Optional in orElse-Branch throws Exception

java - 我想计算一个集合中的集合的数量,在带有流的集合中

node.js 未使用 SQL Server 身份验证连接到 SQL Server 数据库

sql-server - 带有 Golang SQL 驱动程序和 UUID 的 MS SQL 唯一标识符

java - 实现创建时出错 - HHH000437 尝试保存一个或多个