您好,必须修改一些 Hibernate 遗留代码,我应该定义一个 SQL char(2) 列(char(2) 主键的外键)。
我的定义文件包含:
<property
name="language"
type="char"
update="true"
insert="true"
column="LANGUAGE"
length="2"
/>
Run Code Online (Sandbox Code Playgroud)
但休眠生成:
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
(...)
| LANGUAGE | char(1) | YES | | NULL | |
+---------------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
外键表类似于:
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| LANGUAGE | char(2) | NO | PRI | NULL | |
(...)
+--------------+--------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
使用:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.3.1.GA</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Hibernate 中的类型char不映射到 a String,它映射到Java 中的achar或(参见6.1.1.2)。它恰好用作表中的基础列类型来支持 DBMS;巧合的是,它看起来像是简单地忽略了长度(但其原因实际上是不相关的)。Characterchar(1)
您必须使用stringfor 类型(因此它映射到 Java String),然后您必须告诉它用于char(2)存储。一种选择是显式指定sql-type,例如:
<property name="language" type="string" update="true" insert="true">
<column name="LANGUAGE" sql-type="char(2)"/>
</property>
Run Code Online (Sandbox Code Playgroud)
或者稍后手动调整表格,将其从 更改varchar(2)为char(2)。