I want to make an entity that has an autogenerated primary key, but also a unique compound key made up of two other fields. How do I do this in JPA?
I want to do this because the primary key should be used as foreign key in another table and making it compound would not be good.
In the following snippet, I need the command and model to be unique. pk is of course the primary key.
@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;
}
Michel
You can use @UniqueConstraint
something like this :
@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;
}
This will allow your JPA implementation to generate the DDL for the unique constraint.
Use @GeneratedValue to indicate that the key will be generated and @UniqueConstraint to express unicity
@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;
}
来源:https://stackoverflow.com/questions/90885/compound-keys-in-jpa