Cómo hacer múltiples columna UniqueConstraint en HBM?
-
02-10-2019 - |
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;
}
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.