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