Hibernate 在 SQL 服务器中持续 Java 8 DateTimeLocal 作为 VARBINARY
Hibernate persists Java 8 DateTimeLocal as VARBINARY in SQL Server
我正在尝试在由 SQL 服务器数据库支持的新应用程序中使用 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") - 在这种情况下,列类型是按指定正确创建的,但是当我尝试在 table 中保留数据时,出现异常声明 varbinary 数据无法转换为 datetime...
可能与该问题相关的应用程序设置的更多详细信息:
- Hibernate 是 5.2。12.Final
- SQL 服务器是 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 取代,Spring Boot 默认使用它。
此外,我的 child pom.xml 中有一个 属性 设置为 5.2.12.Final,但在 parent 级别相同 属性被设置(再次由 Spring 引导)为 5.0.x。这样,本应从 child 模块获取 5.2 依赖项的 parent 应用程序实际上从 Spring Boot.
获取旧版本
解决方案是在 parent pom.xml.
中设置 属性
我正在尝试在由 SQL 服务器数据库支持的新应用程序中使用 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") - 在这种情况下,列类型是按指定正确创建的,但是当我尝试在 table 中保留数据时,出现异常声明 varbinary 数据无法转换为 datetime...
可能与该问题相关的应用程序设置的更多详细信息:
- Hibernate 是 5.2。12.Final
- SQL 服务器是 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 取代,Spring Boot 默认使用它。
此外,我的 child pom.xml 中有一个 属性 设置为 5.2.12.Final,但在 parent 级别相同 属性被设置(再次由 Spring 引导)为 5.0.x。这样,本应从 child 模块获取 5.2 依赖项的 parent 应用程序实际上从 Spring Boot.
获取旧版本
解决方案是在 parent pom.xml.