2010-05-31 28 views
5

He creado el siguiente bean de entidad y he especificado dos columnas como únicas. Ahora mi problema es que la tabla se crea sin la restricción única y sin errores en el registro. ¿Alguien tiene una idea?Restricción única no creada en JPA

@Entity 
@Table(name = "cm_blockList", uniqueConstraints = @UniqueConstraint(columnNames = {"terminal", "blockType"})) 
public class BlockList { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 
    @ManyToOne(cascade = CascadeType.PERSIST) 
    @JoinColumn(name="terminal") 
    private Terminal terminal; 
    @Enumerated(EnumType.STRING) 
    private BlockType blockType; 
    private String regEx; 
} 
+0

Nuestro servidor JBoss es, por tanto, el proveedor JPA es la hibernación creo. – homaxto

Respuesta

5

Bueno, encontré otra manera de hacer el diseño. Más porque el diseño evolucionó que una solución alternativa.
Escuché sin embargo de un colega que había tenido el mismo problema, esa restricción única solo la crea hibernate (estamos ejecutando JBoss 4.3) cuando se crea toda la base de datos. No funcionará cuando crees una nueva tabla en una base de datos existente.
Por lo tanto, en persistence.xml es necesario establecer hibernate.hbm2ddl.auto en create-drop para que funcione. No puedo confirmar esto sin embargo.

+0

homaxto su observación es correcta. Enfrenté la misma situación y la restricción funciona cuando se establece crear-soltar. –

+0

He tenido el mismo problema, y ​​volviendo a crear toda la base de datos, funcionó – greuze

0

Más sugerencias que una respuesta real ...

  • que deben aclarar qué proveedor JPA (y la versión) que está utilizando para tales preguntas.

  • Me doy cuenta de que una de sus columnas es parte de una asociación ManyToOne, esto podría ser un caso "especial" que su proveedor de JPA no manejó bien. Por mal manejado, me refiero a error. Verificaría el rastreador de problemas para un problema existente (y tal vez crear uno nuevo, su caso parece compatible con JPA).

2

Usted no tiene que dejar todo, tan sólo reduce esta tabla en particular que desea crear un índice único para

0

También me enfrenté al mismo problema, pero agregar unique-key="UK1_test" en el archivo de mapeo funcionó bien.

<property name="hibernate.hbm2ddl.auto">create</property> con unique-key="UK1_test" unique="true" en el archivo de asignación creados alter table employee add constraint UK1_test unique (addrId)

Cuestiones relacionadas