chaves compostas em JPA
-
01-07-2019 - |
Pergunta
Eu quero fazer uma entidade que tem uma chave primária gerada automaticamente, mas também uma chave composta única composta por dois outros campos. Como posso fazer isso em JPA?
Eu quero fazer isso porque a chave primária deve ser usado como chave estrangeira em outra tabela e torná-lo compostos não seria bom.
No seguinte trecho, eu preciso de comando e modelo a ser único. pk é, naturalmente, a chave primária.
@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;
}
Solução
Você pode usar @UniqueConstraint
algo assim:
@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;
}
Isso permitirá que sua implementação JPA para gerar o DDL para a restrição exclusiva.
Outras dicas
Use @GeneratedValue para indicar que a chave será gerada e @UniqueConstraint para expressar unicidade
@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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow