onetoone onetomany mappedby manytoone ejemplo column anotaciones java jpa mapping

java - mappedby - onetomany jpa ejemplo



¿Cómo introducir la restricción de múltiples columnas con anotaciones JPA? (2)

Estoy tratando de introducir una restricción multi-clave en una entidad mapeada por JPA:

public class InventoryItem { @Id private Long id; @Version private Long version; @ManyToOne @JoinColumn("productId") private Product product; @Column(nullable=false); private long serial; }

Básicamente (producto, serie) el par debería ser único, pero solo encontré una manera de decir que el serial debe ser único. Obviamente, esto no es una buena idea ya que diferentes productos pueden tener los mismos números de serie.

¿Hay alguna manera de generar esta restricción a través de JPA o me veo obligado a crearla manualmente en DB?


Como ya se respondió, se puede agregar el índice de varias columnas usando la anotación @Table . Sin embargo, columnNames debe ser el nombre de las columnas DB reales, no el atributo de clase. Entonces, si la columna es como la siguiente:

@Column(name="product_id") Long productId;

Entonces la anotación @Table debería ser como la siguiente

@Table(uniqueConstraints= @UniqueConstraint(columnNames = {"product_id", "serial"})


Puede declarar restricciones únicas utilizando la @Table(uniqueConstraints = ...) en su clase de entidad, es decir,

@Entity @Table(uniqueConstraints={ @UniqueConstraint(columnNames = {"productId", "serial"}) }) public class InventoryItem { ... }

Tenga en cuenta que esto no crea mágicamente la restricción única en la base de datos, aún necesita un DDL para que se cree. Pero parece que está utilizando algún tipo de herramienta automatizada para crear la base de datos basada en definiciones de entidades JPA.