Comment faire plusieurs colonnes UniqueConstraint dans hbm?

travailler sur un ancien code d'hibernation.

Comment puis-je faire ce qui suit avec hbm.xml (hibernate mapping file) au lieu des annotations?

@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;
}
23
demandé sur Gabriel 2010-04-30 02:02:40

2 réponses

properties balise:

...
<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>
...

extrait de la Documentation:

L'élément permet la définition d'un nommé, regroupement logique des propriétés d'une classe. L'utilisation la plus importante de la construction, c'est qu'il permet une combinaison de propriétés à la cible d'un bien immobilier-réf. C'est aussi un moyen commode de définir une contrainte unique à plusieurs colonnes.

Toutes les options disponibles sont décrites dans la Documentation sur L'hibernation.

20
répondu Thierry 2013-08-18 20:05:34

Vous pouvez aussi faire ceci:

  <many-to-one name="client" unique-key="uk1,uk2" .../>
  <property name="username" unique-key="uk1"  .../>
  <property name="email" unique-key="uk2"  .../>

Vous n'avez pas besoin d'utiliser l'étiquette dans hbm . Si vous voulez seulement plusieurs contraintes uniques.

4
répondu Shayan Mirzaee 2017-07-17 09:10:25