java - 如何在 hibernate hbm.xml 中定义 char(2) 列?

标签 java hibernate

您好,我必须修改一些 hibernate 遗留代码,我应该定义一个 SQL char(2) 列(char(2) 主键的外键)。

我的定义文件包含:

    <property
        name="language"
        type="char"
        update="true"
        insert="true"
        column="LANGUAGE"
        length="2"
    />

但是 hibernate 生成:

+---------------------+--------------+------+-----+---------+----------------+
| Field               | Type         | Null | Key | Default | Extra          |
+---------------------+--------------+------+-----+---------+----------------+
(...)
| LANGUAGE            | char(1)      | YES  |     | NULL    |                |    
+---------------------+--------------+------+-----+---------+----------------+

外键表是这样的:

+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| LANGUAGE     | char(2)      | NO   | PRI | NULL    |       |
(...)
+--------------+--------------+------+-----+---------+-------+

使用:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.1.GA</version>
    </dependency>

最佳答案

Hibernate 中的 char 类型不映射到 String,它映射到 charCharacter在 Java 中(参见 6.1.1.2)。它恰好使用 char(1) 作为表中的基础列类型来支持您的 DBMS;巧合的是,它看起来只是忽略了长度(但其原因实际上是无关的)。

您必须使用 string 作为类型(因此它映射到 Java String),然后您必须告诉它使用 char(2) 用于存储。一种选择是显式指定 sql-type,例如:

<property name="language" type="string" update="true" insert="true">
    <column name="LANGUAGE" sql-type="char(2)"/>
</property>

或者之后手动调整表格,将其从 varchar(2) 更改为 char(2)

关于java - 如何在 hibernate hbm.xml 中定义 char(2) 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22943144/

相关文章:

java - 如何为 Java 创建 Kotlin 静态变量和函数?

用于 XML 模式操作的 Java API

java - Spring Data Native 查询分页不起作用

java - 带有计数函数aliasToBean的sql条件Hibernate问题

java - 如何使用一个持久性单元连接到多个数据库?

java - 如何在 Java 中使用 HtmlUnit 从下拉框中选择一个元素?

java - 流是否使用流源的特征?

java - 配置自定义 HibernateItemWriter 时获取 "Either HibernateOperations or SessionFactory must be provided"

java - 使用 JPQL 创建查询——查询语法异常

java - Hibernate hql,在同一个查询中执行多个更新语句