JPA中的复合键

时间:2008-09-18 08:16:07

标签: java jpa annotations compound-key

我想创建一个具有自动生成主键的实体,但也是一个由两个其他字段组成的唯一复合键。我如何在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;
}

2 个答案:

答案 0 :(得分:18)

您可以使用@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。

答案 1 :(得分:0)

使用@GeneratedValue表示将生成密钥,使用@UniqueConstraint表示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;
}