2010-11-05 23 views
6

Tengo una tabla MySQL para contener etiquetas (es decir, como las utilizadas aquí en Desbordamiento de pila). Simplemente tiene una identificación (pk) y una columna de etiqueta para contener la etiqueta.Hibernate: restricción de columna única que se ignora

Los métodos de obtención anotados para mi entidad Tag se muestran a continuación.

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "id", unique = true, nullable = false) 
public int getId() { 
    return this.id; 
} 

@Column(name = "tag", unique = true, nullable = false) 
public String getTag() { 
    return this.tag; 
} 

Estoy utilizando una restricción de columna única en la etiqueta ya que nunca debe haber más de una fila para una etiqueta determinada. Sin embargo, Hibernate parece estar ignorando esto, es decir, puedo guardar la misma etiqueta muchas veces y simplemente crea una nueva fila en lugar de lanzar una excepción.

¿Me está faltando algo o debería estar funcionando?

Respuesta

3

De JavaDoc de UniqueConstraint (unique=true en @Colunm es sólo un atajo):

Esta anotación se utiliza para especificar que una restricción única se va a incluir en el DDL generado para una tabla primaria o secundaria.

Por lo tanto, no parece imponer la singularidad en los insertos. Debería crear una restricción única en la base de datos en cualquier caso.

0

Echas de menos que esto es solo una información.

Debe agregar también la restricción en la columna en la base de datos.

+0

Gracias por la respuesta. Por cierto, ¿no es ridículo? – zakmck

+0

No, no lo es. La base de datos valida que la entidad sea única de manera realmente rápida. Un ORM no puede ser tan rápido. Es por eso que esto tiene sentido. –

+1

Quiero decir, ¿no es ridículo que use esa anotación y no cree una restricción única correspondiente en la base de datos? Así es como inicialmente entendí que se comporta, aunque hice un par de experimentos y parece que no refleja 'único = verdadero' en el esquema solo cuando uso ciertas bases de datos, como HSQL, el mismo código genera una restricción MySQL cuando Cambio la configuración de DB. – zakmck

Cuestiones relacionadas