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;
}
Foi útil?

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
scroll top