2016-10-05 15 views
1

Oracleでデータベースを作成したとします。ORACLEですでに作成されているが、Hibernateエンティティで作成された "CREATE UNIQUE INDEX"のマッピング方法

CREATE UNIQUE INDEX "SOME_NAME" ON "SOME_TABLE_NAME" (COLUMN1,COLUMN2) 

私は休止状態エンティティは、その認識していることを確認するには:私のテーブルの一つは、次の文があります。

  • @UniqueConstraintのように見えます。注釈は、テーブルの生成が有効な場合にのみ使用されるため、ここでは使用できません。
  • また、CREATE UNIQUE INDEX "SOME_NAME" ON "SOME_TABLE_NAME" (COLUMN1,COLUMN2)が私のH2データベースで動作していないことに気付きました。

エンティティがその制限を認識していることを確認する方法はありますか?

+0

あなたのエンティティは、それを認識できません。ただし、データベースに書き込む前に条件をチェックする何らかの形式の検証を追加できます。カスタムJSR303の検証などがあります。例を見てください:http://stackoverflow.com/questions/17092601/how-to-validate-unique-username-in-spring –

+0

@ AlanHayそれでは、Oracleだけで制約を追加するだけでは不十分かどうか疑問に思っています。したがって、DBからエンティティに引き出されている値はすでに検証されています。彼らじゃない? – Columb1a

+0

ユーザが入力したデータを保存していて、英国が違反した場合、スタックトレースは何がうまくいかなかったのかを識別して意味のあるエラーメッセージを表示するのに役立ちません。これは、Javaの検証が有用な場合です。 –

答えて

1

JPA/Hibernateの@Tableアノテーションは、uniqueConstraints属性を許可します。これにより、エンティティに制約を認識させることができます。

@Table(name="SOME_TABLE_NAME", 
    uniqueConstraints = {@UniqueConstraint(columnNames={"COLUMN1", "COLUMN2"})} 
) 
+0

はい、しかし、あなたは休止状態を通して、あなたのDBスキーマを作成したいときUniqueConstraintだけで使用することができようになっています '/ ** \t * \t *テーブルの上に置かれるべきです(オプション)ユニーク制約。これらは、テーブルの生成が有効な場合にのみ使用されます。 \t *これらの制約は、主キーの制約に加えて適用されます。 \t *

\t※デフォルトでは追加の制約はありません。 \t */ \t UniqueConstraint [] uniqueConstraints()default {}; ' 少なくとも私の側から@ @ UniqueConstrainst'は効果がありませんでした。 – Columb1a

+0

はい、自動生成なしでこれは単なる追加情報(注釈付きクラス)です。データベースエンジンで手動で制約を作成する必要があります。また、@AlanHayが永続性例外から返されたスタックトレースが、何がうまくいかなかったかもしれないことを示しているかもしれません。はい、Javaの検証を追加して意味のある検証エラーメッセージを返すこともできます。 –

関連する問題