いくつかのレガシー休止状態コードに取り組んでいます。
アノテーションの代わりに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>
...
ドキュメントの抜粋:
<properties>要素を使用すると、クラスのプロパティの名前付きの論理グループを定義できます。コンストラクトの最も重要な使用法は、プロパティの組み合わせをproperty-refのターゲットにすることができることです。これは、複数列の一意性制約を定義するための便利な方法でもあります。
使用可能なすべてのオプションは Hibernateドキュメント で説明されています。
これを行うこともできます:
<many-to-one name="client" unique-key="uk1,uk2" .../>
<property name="username" unique-key="uk1" .../>
<property name="email" unique-key="uk2" .../>
Hbmでタグを使用する必要はありません。複数の一意の制約のみが必要な場合。
同じunique-key属性を2つの異なる列に追加できます。これにより、複合一意キーが作成されます。
<property name="firstName" column="first_name" unique-key="name" />
<property name="lastName" column="last_name" unique-key="name" />
上記の例では、一意のキーはfirst_name列とlast_name列の両方から作成されます。