2013-05-17 5 views
6

私はこのコードを持っている:javax.persistence @Columnの長さフィールドはmaxを定義していますか?

List<Item> items = getEntityManager().createNamedQuery(SQL).getResultList(); 

13に等しいserialNo文字を有するデータ:

public class Item { 
    @Column(name = "serialNo", length = 12) 
    public String getSerialNo() { 
     return this.serialNo; 
    } 

    public void setSerialNo(String serialNo) { 
     this.serialNo = serialNo; 
    } 
} 

しかし、データベーススキーマは、アイテムを介して取得された場合、カラムは13な長さを定義します(dbテーブル・スキーマでは13が許可されているので)、まだ切り捨てられていない13として表示されています。それで@Columnlengthの使用は何ですか?

答えて

9

javax.persistence.ColumnStringフィールドの列の長さを定義するために使用される(これは他のタイプでは無視される)と永続化フレームワークからデータベース・スキーマ(数CREATE TABLE複数可)を生成するときに使用のみあるlength属性そのような(hibernate.cfg.xml上の休止状態の場合)、このオプションなどのエンティティ、:あなたの例では

<property name="hbm2ddl.auto">create</property> 

、列serialNoVARCHAR(12)として作成されます。

他のすべての目的(データの挿入または取得)では、が無視されます。です。



あなたのクラスで、データベースの「文書」のメタデータ情報にしたい場合にも、それは便利です。このように、自身は、"値が長すぎる"または"データ切り捨て"のような例外を挿入して回避しようとする前に、保存する値を検証できます。

+0

リンクをドキュメントに貼り付けることはできますか?このリンクでは、DDLのみに使用される長さについては何も言及していません。http://docs.oracle.com/java/5/api/javax/persistence/Column.html#length() –

+0

これはあまり具体的ではありません。仕様(http://download.oracle.com/otndocs/jcp/persistence-2_1-fr-eval-spec/index.html - JavaPersistence.pdf)の11.2.2.1項を参照してください。これは文書全体で「長さ」と言われる唯一の瞬間です。 – acdcjunior

+0

明らかにスキーマの生成に関連して言及されます: "11.2スキーマの生成で使用されるオブジェクト/リレーショナルメタデータ"。返信いただきありがとうございます。 –

関連する問題