Domanda

Voglio fare un'entità che ha un generata automaticamente chiave primaria, ma anche una singolare chiave composto di due altri campi.Come faccio a fare questo in JPA?
Io voglio fare questo perché la chiave primaria deve essere utilizzato come chiave esterna di un'altra tabella e rendendo il composto non sarebbe buono.

Nel seguente frammento di codice, ho bisogno di comando e modello unico.pk è, naturalmente, la chiave primaria.

@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;
}
È stato utile?

Soluzione

È possibile utilizzare @UniqueConstraint qualcosa di simile a questo :

@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;
}

Questo permetterà il vostro JPA attuazione per generare il DDL per l'unico vincolo.

Altri suggerimenti

Utilizzare @GeneratedValue per indicare che la chiave viene generata e @UniqueConstraint per esprimere l'unicità

@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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top