HBMで複数の列のUniqueConstraintを行うにはどうすればよいですか?
-
02-10-2019 - |
質問
いくつかのレガシー冬眠コードに取り組んでいます。
注釈ではなく、hbm.xml(hibernateマッピングファイル)で以下を実行するにはどうすればよいですか?
@Table(name="users", uniqueConstraints = {
@UniqueConstraint(columnNames={"username", "client"}),
@UniqueConstraint(columnNames={"email", "client"})
})
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private int id;
private String username;
private String email;
private Client client;
}
解決
使用 properties
鬼ごっこ:
...
<properties name="uk1" unique="true">
<property name="username" .../>
<many-to-one name="client" .../>
</properties>
<properties name="uk2" unique="true">
<property name="email" .../>
<many-to-one name="client" update="false" insert="false" .../>
</properties>
...
ドキュメント抽出:
u003Cproperties>要素を使用すると、クラスのプロパティの指定された論理グループ化の定義を可能にします。コンストラクトの最も重要な使用法は、プロパティの組み合わせがプロパティREFのターゲットになることを可能にすることです。また、マルチカラムの一意の制約を定義する便利な方法でもあります。
利用可能なすべてのオプションは、で説明されています 休止状態のドキュメント.
他のヒント
これを行うこともできます:
<many-to-one name="client" unique-key="uk1,uk2" .../>
<property name="username" unique-key="uk1" .../>
<property name="email" unique-key="uk2" .../>
HBMでタグを使用する必要はありません。複数の一意の制約のみが必要な場合。
同じユニークキー属性を2つの異なる列に追加できます。これにより、コンポジットユニークなキーが作成されます。
<property name="firstName" column="first_name" unique-key="name" />
<property name="lastName" column="last_name" unique-key="name" />
上記の例では、一意のキーは、first_nameとlast_name列の両方から作成されます。
所属していません StackOverflow