【问题标题】:Hibernate with NVARCHAR2使用 NVARCHAR2 休眠
【发布时间】:2023-04-07 19:18:01
【问题描述】:

我有一个列为NVARCHAR2 的表,并且我已经使用休眠注释构建了我的对象,当我想插入数据库或从数据库中获取时,结果类似于“???????” , 我已经实现了如下自定义方言,但它不起作用。

public class CustomOracleDialect extends Oracle10gDialect{

    public CMSCustomOracleDialect() {
        registerHibernateType( Types.NVARCHAR, Hibernate.STRING.getName() );
        registerColumnType( Types.VARCHAR, "nvarchar2($1)" );
        registerColumnType( Types.CLOB, "nclob" );
        registerColumnType( Types.NCLOB, "nclob" );
    }

}

【问题讨论】:

    标签: hibernate oracle11g hibernate-mapping nvarchar


    【解决方案1】:

    可能有点晚了,但我也遇到了这个问题,我发现可以用

    注释你的休眠类
    @Nationalized
    

    @Type(type="org.hibernate.type.StringNVarcharType")
    

    这使您的元素使用org.hibernate.type.StringNVarcharType 而不是 VarChar 类型字符串

    在 4.1.10 及更高版本中引入休眠。这样它才能正确使用 NVarChar2 类型,否则它将默认返回 VarChar2,这会丢失您的国际字符。

    解决此问题的 Hibernate Jira:https://hibernate.atlassian.net/browse/HHH-5869

    和 Jboss-Hibernate 文档: https://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch08.html#value-national-character-types

    【讨论】:

    • 你就是那个男人。我使用了属性 并解决了我的问题。
    【解决方案2】:

    您如何在对象中映射列?以下映射有效

    @Column(name = "PHONE_NUMBER", nullable = false, columnDefinition = "nvarchar2 (2000)")
    public String getPhoneNumber() {
        return this.phoneNumber;
    }
    

    注意这是 JPA @Column 注释。在电话对象上调用 entityManager.persist() 有效。

    【讨论】:

      【解决方案3】:
      public class CustomOracleDialect extends Oracle10gDialect {
      
          public CustomOracleDialect() {
              super();
              registerColumnType(Types.NVARCHAR, "nvarchar2($l)");//$l not $1
              registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName());
          }
      }
      

      然后将CustomOracleDialect 设置为您的休眠配置文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-02
        • 2011-02-25
        • 2013-07-01
        • 2014-09-27
        • 2014-11-30
        • 2013-04-13
        • 2023-03-16
        • 1970-01-01
        相关资源
        最近更新 更多