2011-01-03 11 views
2

のSchemaExportのに適用されませ私は、スキーマのエクスポートを使用すると、私のエンティティクラスが私に必要なテーブルスキーマUNIQUE制約にHibernate

@Entity 
@Table(name = "User") 
public class User implements Serializable { 
    private Long id; 
    private String loginName; 

    @Id 
    @GeneratedValue 
    public Long getId() { 
     return id; 
    } 
    @Column(name = "login_name", unique = true) 
    public String getLoginName() { 
     return loginName; 
    } 
    //other setters 
} 

を作成しない理由はかなりわかりませんよ。

new SchemaExport(config).create(true, true); 

このSQLを作成しますが、それではログイン名フィールドに一意の制約を追加しません。

drop table User 
create table User (id bigint generated by default as identity, login_name varchar(255)primary key (id)) 

私は、Apache Derbyのを使用していると私はダービーのリファレンスマニュアルをチェックして、それが列に一意制約をサポートしています。私はクラスのuniqueconstraint注釈を追加しようとしましたが、結果は同じです。

+1

、それはSQLのすべてですか?私の経験では、通常、UNIQUE制約を追加するALTER TABLEステートメントがあります... – kem

答えて

7

問題は、DerbyがDB2のDialectを拡張し、 "supportsNotNullUnique"を "false"として指定することです。したがって、解決策は、カスタムDerby方言を作成し、このメソッドを変更して「true」を返すか、フィールドをnullable = falseにすることです。

@Column(name = "login_name", unique = true, nullable=false) 

または

import org.hibernate.dialect.DerbyDialect; 

public class CustomDerbyDialect extends DerbyDialect { 
    public boolean supportsNotNullUnique() { 
     return true; 
    } 
} 
+0

ありがとうございます。私は家に帰ったときにこれを試してみる.. –

関連する問題