7

次のエンティティ Bean を作成し、2 つの列を一意として指定しました。今私の問題は、一意の制約なしでテーブルが作成され、ログにエラーがないことです。誰にもアイデアはありますか?

@Entity
@Table(name = "cm_blockList", uniqueConstraints = @UniqueConstraint(columnNames = {"terminal", "blockType"}))
public class BlockList {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="terminal")
    private Terminal terminal;
    @Enumerated(EnumType.STRING)
    private BlockType blockType;
    private String regEx;
}
4

6 に答える 6

7

さて、私はデザインを作る別の方法を見つけました。回避策よりもデザインが進化したためです。
しかし、同じ問題を抱えていた同僚から、データベース全体が作成されるときに一意の制約のみが休止状態 (JBoss 4.3 を実行しています) によって作成されると聞きました。既存のデータベースに新しいテーブルを作成する場合は機能しません。
したがって、persistence.xml では、それを機能させるために に設定hibernate.hbm2ddl.autoする必要がありcreate-dropます。私はこれを確認することはできません。

于 2010-06-09T08:01:38.380 に答える
2

すべてを削除する必要はありません。一意のインデックスを作成するこの特定のテーブルを削除するだけです

于 2012-09-01T01:44:45.017 に答える
0

実際の答えよりも多くの提案...

  • このような質問に使用しているJPAプロバイダー(およびバージョン)を明確にする必要があります。

  • あなたの列の1つがManyToOne関連付けの一部であることに気付きました。これは、JPAプロバイダーによって適切に処理されない「特殊な」ケースである可能性があります。うまく処理されていないということは、バグを意味します。問題トラッカーで既存の問題を確認します(新しい問題を作成する場合もありますが、ケースはJPAに準拠しているようです)。

于 2010-05-31T14:48:02.803 に答える
0

一意の制約が必要な場合は、SQL で実行する必要があります。

ALTER TABLE cm_blockList ADD CONSTRAINT cm_blockList_unq UNIQUE (terminal);

参照: https://stackoverflow.com/a/3498242/1244488

于 2013-04-09T02:46:13.900 に答える
0

私も同じ問題に直面しましたがunique-key="UK1_test"、マッピングファイルを追加するとうまくいきました。

<property name="hibernate.hbm2ddl.auto">create</property> 作成さunique-key="UK1_test" unique="true" れたマッピング ファイルで alter table employee add constraint UK1_test unique (addrId)

于 2014-04-03T09:52:20.020 に答える