簡體   English   中英

如何在hibernate hbm.xml中定義char(2)列?

[英]how to define char(2) column in hibernate hbm.xml?

您必須修改一些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 ,它映射到Java中的charCharacter (見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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM