【问题标题】:Spring Boot & Hibernate: NVARCHAR column type without @Type annotationSpring Boot & Hibernate:没有@Type 注释的 NVARCHAR 列类型
【发布时间】:2020-08-05 03:19:12
【问题描述】:

我的数据库中有一个表用于我的Customer 实体。此表包含一些类型为 NVARCHAR 的列(这是一个要求,我无法更改它),但 Hibernate 无法在不使用 @Type 的情况下将此列类型映射到我的 Entity 中的正确属性注释,它抱怨它需要一个类型为VARCHAR而不是NVARCHAR的列:

@Entity
public class Customer {
  // ...

  @Column(name = "first_name", nullable = false)
  @Type(type="org.hibernate.type.StringNVarcharType")
  private String firstName;

  // ...
}

有没有什么方法可以在不使用@Type注解的情况下将hibernate配置为能够映射到NVARCHAR类型,即符合JPA规范?

Spring Boot 版本:2.1.12.RELEASE
休眠版:5.3.15.Final
休眠方言:org.hibernate.dialect.SQLServer2012Dialect

【问题讨论】:

    标签: hibernate spring-boot jpa spring-data-jpa spring-data


    【解决方案1】:

    其实@ColumnJPA注解可以让你指定列类型(不必使用@Type@Nationalized注解):

    @Column(name = "first_name", columnDefinition = "nvarchar", nullable = false)
    private String firstName; 
    

    【讨论】:

      【解决方案2】:

      推荐的方法是使用@Nationalized注解:

      @Entity
      public class Customer {
        // ...
      
        @Column(name = "first_name", nullable = false)
        @Nationalized 
        private String firstName;
      
        // ...
      }
      

      但您也可以将其设置为默认值:

      如果您的应用程序和数据库使用国有化,您可以改为 想要默认启用国有化字符数据。

      您可以通过 hibernate.use_nationalized_character_data 执行此操作 设置或通过调用 MetadataBuilder#enableGlobalNationalizedCharacterDataSupport 期间 引导程序。

      在 application.properties 中可以设置:

      spring.jpa.properties.hibernate.use_nationalized_character_data =true
      

      在 Hibernate 文档https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#basic-nationalized中了解更多信息

      【讨论】:

      • 但是 @Nationalized 注释是 JPA 规范的一部分吗?
      • 不,那是休眠。 JPA Spec 不包括国有化
      • 好的,谢谢!您的答案有效,但我正在寻找一种符合 JPA 规范的方法。无论如何,我都赞成您的问题,因为如果您不希望符合 JPA,这是一种解决问题的好方法。
      • 没有符合 JPA 的解决方案。顺便提一句。 JPA 只是 Hibernate 或任何其他 OR-Mapper 之上的一层,并且仅具有底层实现功能的子集。我使用 OR-Mapping 已有 20 年了,迟早我必须使用实现规范。
      猜你喜欢
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 2011-01-12
      • 2013-09-13
      相关资源
      最近更新 更多