Domanda

di lavoro su alcuni codice legacy di ibernazione.

Come posso fare quanto segue con hbm.xml (hibernate file di mapping) invece che con annotazioni?

@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;
}
È stato utile?

Soluzione

Utilizzare il tag 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>
...

estrarre documentazione:

  

Il elemento consente la definizione di un nome,   raggruppamento logico delle proprietà di una classe. L'uso più importante   del costrutto è che permette una combinazione di proprietà di essere   l'obiettivo di una proprietà-ref. E 'anche un modo conveniente per definire un   a più colonne vincolo univoco.

Tutte le opzioni disponibili sono descritti nella sezione Sospensione documentazione .

Altri suggerimenti

È anche possibile fare questo:

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

Non è necessario utilizzare il tag in HBM. Se si desidera solo più vincoli univoci.

È possibile aggiungere lo stesso attributo univoco-chiave per due colonne differenti. Questo creerà chiave unica composita.

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

Nell'esempio sopra la chiave univoca verrà creato sia da first_name e la colonna cognome.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top