Pregunta

Trabajo en alguna código heredado de hibernación.

¿Cómo hacer lo siguiente con hbm.xml (archivo de asignación de hibernación) en lugar de con anotaciones?

@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;
}
¿Fue útil?

Solución

El uso de la etiqueta 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>
...

extracto Documentación:

  

El elemento permite la definición de un nombre,   agrupación lógica de las propiedades de una clase. El uso más importante   de la construcción es que permite una combinación de propiedades que se   el objetivo de una property-ref. También es una manera conveniente de definir una   varias columnas restricción única.

Todas las opciones disponibles se describen en el Hibernate documentación .

Otros consejos

También puede hacer esto:

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

No es necesario utilizar la etiqueta de HBM. Si sólo desea múltiples restricciones únicas.

Puede agregar mismo atributo de clave única de dos columnas diferentes. Esto creará clave única compuesta.

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

En el ejemplo anterior la clave única se crea a partir de tanto FIRST_NAME y la columna last_name.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top