Tengo dos campos de una clase de entidad que no quiero que sean exclusivos, sino que se utilicen como campos compuestos para una clave que debe ser única. Por ejemplo, tengo dos campos (nombre y versión) que pueden ser iguales para otros registros, pero juntos deben ser únicos. ¿Cuál es la mejor manera de hacerlo usando Hibernate (con anotaciones)? Estoy usando Hibernate Validator para otros campos, pero no estoy seguro de cómo usar eso para validar que dos campos juntos componen una clave única. Estoy usando una clase de entidad genérica que tiene un tipo genérico de Id. Que se puede intercambiar para una clase de clave compuesta, pero todavía tengo que conseguir que funcione muy bien.¿Cómo obtener una clave única para dos campos con Hibernate?
Respuesta
Esto creará una clave única en la base de datos:
@Table(name = "MYTABLE",
uniqueConstraints = { @UniqueConstraint(columnNames = { "NAME", "VERSION" }) })
Esto se hará cumplir por la base de datos en una actualización o persisten.
Tendrá que escribir su propio validador personalizado si desea hacer cumplir esto usando Hibernate Validator.
y lo que debe escribirse en la entidad como pk? ... si el pk es nombre y versión –
@yoav.str - Si PK es el nombre y la versión, en su lugar debe usar una clave primaria compuesta con @ Id/@ IdClass o @ EmbeddedId/@ Embeddable – mtpettyp
Esto funcionó para mí usando Hibernate 3.6.3.Final. ¡Gracias! – Jorge
Normalmente ajustamos los dos campos en una clase de clave interna que está marcada como @Embeddable. Por ejemplo:
@Entity
public class Foo {
@EmbeddedId()
private Key key;
...
@Embeddable
public static class Key {
@Column(nullable=false)
private String name;
@Column(nullable=false)
private int version;
protected Key() {
// for hibernate
}
public Key (String name, int version) {
this.name = name;
this.version = version;
}
...
// You probably want .equals and .hashcode methods
}
}
- 1. Cómo validar dos campos para unicidad
- 2. Únase entre dos campos no clave
- 3. una clave Hibernate 3 Compuesto con GeneratedValue
- 4. ¿Cómo puedo cambiar dos campos de una fila única dentro de una confirmación usando SQLAlchemy?
- 5. Utilizando una restricción única en Hibernate JPA2
- 6. Generación de clave única
- 7. Compuesto/clave primaria/única compuesta con Django
- 8. Hibernate @OneToMany y la restricción ÚNICA
- 9. ¿Combinación única de campos en SQLite?
- 10. Buscar todas las columnas de una tabla usando una única condición where con palabra clave única en mysql
- 11. mysql clave única e índice
- 12. MySQL - Clave externa única
- 13. ¿Cómo hibernate los ID de los campos generados automáticamente?
- 14. MySQL: restricción única en campos múltiples
- 15. ¿podemos insertar en dos tablas con una única instrucción sql?
- 16. ¿Cómo hacer que una clave compuesta sea única?
- 17. Hibernate nueva palabra clave con distinta
- 18. Entity Framework Association con campos no clave
- 19. Cómo eliminar una clave única de la tabla mysql
- 20. uniendo dos tablas con una clave externa con nulo?
- 21. C# Diccionario con dos valores por clave?
- 22. Cómo agregar una clave principal separada a una tabla de unión en Hibernate
- 23. Django: UserProfile con clave externa única en Django Admin
- 24. validar dos campos con jQuery Validar
- 25. ¿Índice único o clave única?
- 26. Claves externas de Entity Framework para campos clave no primarios
- 27. Anotar una suma de dos campos multiplicado
- 28. clave única en toda la tabla mysql?
- 29. Concatenar dos campos
- 30. Obtener y establecer una única cookie con Node.js Servidor HTTP
¿Desea una "restricción única" en dos columnas, o una "clave principal" en la tabla que consta de dos columnas? –
Quiero una restricción única en dos columnas. Por ejemplo, la combinación de nombre y versión debe ser única. Así que podría tener dos registros en la tabla con el registro # 1 (name = abc/version = 1) y con el registro # 2 (name = abc/version = 2), pero no dos registros en la tabla con el registro # 1 (nombre = abc/version = 1) y con el registro # 2 (name = abc/version = 1). –