Question

travail sur un code de mise en veille prolongée héritage.

Comment puis-je effectuer les opérations suivantes hbm.xml (mise en veille prolongée fichier de mappage) au lieu de avec 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;
}
Était-ce utile?

La solution

Utilisez la balise 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>
...

extrait de Documentation:

  

L'élément permet la définition d'un nom,   regroupement logique des propriétés d'une classe. L'utilisation la plus importante   de la construction est qu'il permet une combinaison de propriétés à   la cible d'une propriété ref. Il est également un moyen pratique de définir un   multi-colonne contrainte unique.

Toutes les options disponibles sont décrites dans la section Hibernate documentation .

Autres conseils

Vous pouvez également 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 la balise dans HBM. Si vous ne souhaitez que plusieurs contraintes uniques.

Vous pouvez ajouter même attribut-clé unique à deux colonnes différentes. Cela va créer une clé composite unique.

<property name="firstName" column="first_name" unique-key="name" />
<property name="lastName" column="last_name" unique-key="name" />

Dans l'exemple ci-dessus la clé unique sera créé à la fois prenom et de la colonne last_name.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top