Tit*_*lum 6 hibernate jpa spring-data spring-data-jpa spring-boot
我的数据库中有一个用于我的Customer实体的表。该表包含一些类型的列NVARCHAR(这是一个要求,我无法更改它),但是 Hibernate 在不Entity使用@Type注释的情况下无法将此列类型映射到 my 中的正确属性,它抱怨它需要一个列用类型VARCHAR代替NVARCHAR:
@Entity
public class Customer {
// ...
@Column(name = "first_name", nullable = false)
@Type(type="org.hibernate.type.StringNVarcharType")
private String firstName;
// ...
}
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以配置hibernate以能够映射到NVARCHAR类型而不使用@Type注释,这符合JPA规范?
Spring Boot 版本:2.1.12.RELEASE
Hibernate 版本: 5.3.15.Final
Hibernate 方言: org.hibernate.dialect.SQLServer2012Dialect
Sim*_*lli 11
推荐的方法是使用 @Nationalized 注释:
@Entity
public class Customer {
// ...
@Column(name = "first_name", nullable = false)
@Nationalized
private String firstName;
// ...
}
Run Code Online (Sandbox Code Playgroud)
但您也可以将其设置为默认值:
如果您的应用程序和数据库使用国家化,您可能希望默认启用国家化字符数据。
您可以通过 hibernate.use_nationalized_character_data 设置或在引导期间调用 MetadataBuilder#enableGlobalNationalizedCharacterDataSupport 来执行此操作。
在 application.properties 中你可以设置:
spring.jpa.properties.hibernate.use_nationalized_character_data =true
Run Code Online (Sandbox Code Playgroud)
在 Hibernate 文档中了解更多相关信息https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#basic-nationalized
实际上,事实证明,@ColumnJPA 注释允许您指定列类型(无需使用@Type或@Nationalized注释):
@Column(name = "first_name", columnDefinition = "nvarchar", nullable = false)
private String firstName;
Run Code Online (Sandbox Code Playgroud)