JPA中的复合键
时间:2020-03-06 14:20:23 来源:igfitidea点击:
我想创建一个具有自动生成的主键,但又具有由其他两个字段组成的唯一复合键的实体。如何在JPA中执行此操作?
我要这样做是因为主键应该用作另一个表中的外键,并且使其成为复合键就不好了。
在以下代码段中,我需要命令和模型是唯一的。 pk当然是主键。
@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; }
解决方案
我们可以使用@ UniqueConstraint
这样的东西:
@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; }
这将允许JPA实现为唯一约束生成DDL。
使用@GeneratedValue表示将生成密钥,并使用@UniqueConstraint表示唯一性
@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; }