に応じて、複数列の制約を作成:column1 == someValue
場合は、私は次のように述べているOracleデータベース上の制約を作成しようとしている列の値
、その後column2
とcolumn3
の組み合わせが持つすべてのエントリに対して一意である必要がありますcolumn1 == someValue
私はユニーク制約とチェック制約の概念に精通しており、これらの構造で制約を表現しようとしました。しかし、私は条件を含める方法を見つけることができないようです。だからこそ私はそれが可能なのか疑問に思います。
次のクラス階層をマッピングするHibernateが作成されるために、私は制約を作成するテーブル(簡潔にするためommited属性のほとんど):
class MyClass {
String name;
MyClass parent;
}
class MySubClass extends MyClass {
String businessValue;
}
は、クラスが単一のテーブルの戦略を使用して、さまざまな使用してマッピングされています各タイプの識別器の値。 MySubClass
のすべてのインスタンスに対して、名前と親の組み合わせが一意でなければならないという顧客の要件です(column1は弁別子の値になります)。テーブル制約を介して、親クラスにそのような制約を適用するのは簡単でしょう。ただし、この制約はMySubClass
にのみ適用する必要があります。
Hibernate Validatorなどのフレームワークを使用してデータをデータベースに入力する前に、そのデータを検証する可能性があります。しかし、検証にはデータベースへのアクセスが必要になるため、データベースの制約はパフォーマンスを向上させる方法のようです。
ORM開発者がデータベースの制約を使用するメリットを享受していることを非常にうれしく思います! –