質問

いくつかのレガシー冬眠コードに取り組んでいます。

注釈ではなく、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列の両方から作成されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top