您好,我必须修改一些 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
,它映射到 char
或 Character
在 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/