Pregunta

Quiero crear una entidad que tenga una clave primaria generada automáticamente, pero también una clave compuesta única formada por otros dos campos.¿Cómo hago esto en JPA?
Quiero hacer esto porque la clave principal debería usarse como clave externa en otra tabla y hacerla compuesta no sería bueno.

En el siguiente fragmento, necesito que el comando y el modelo sean únicos.pk es, por supuesto, la clave principal.

@Entity
@Table(name = "dm_action_plan")
public class ActionPlan {
    @Id
    private int pk;
    @Column(name = "command", nullable = false)
    private String command;
    @Column(name = "model", nullable = false)
    String model;
}
¿Fue útil?

Solución

Puedes usar @UniqueConstraint algo como esto :

@Entity
@Table(name = "dm_action_plan",
       uniqueConstraints={ @UniqueConstraint(columnNames= "command","model") } )
public class ActionPlan {
    @Id
    private int pk;

    @Column(name = "command", nullable = false)
    private String command;

    @Column(name = "model", nullable = false)
    String model;
}

Esto permitirá que su implementación JPA genere el DDL para la restricción única.

Otros consejos

Utilice @GeneratedValue para indicar que se generará la clave y @UniqueConstraint para expresar unicidad

@Entity
@Table(name = "dm_action_plan"
       uniqueConstraint = @UniqueConstraint({"command", "model"})
)
public class ActionPlan {
    @Id
    @GeneratedValue
    private int pk;
    @Column(name = "command", nullable = false)
    private String command;
    @Column(name = "model", nullable = false)
    String model;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top