7

可以通过在 JPA 中使用 @Id 注释为其类分配主键。我的问题是,如果不想在他的表中使用自动生成的键并使用字段(可能不止一个)作为主键怎么办。

假设我们有一个包含 SSN、NATIONALITY 和 NAME 的人员表。SSN 被定义为一个人在他的国家被识别的号码。因此,我们可能在两个不同的国家有两个人数相同的人。此表的主键可以是 SSN+NATIONALITY。有没有办法使用 JPA 映射这两个字段并将其映射到一个对象?或创建自动生成的 id 并使用 @Id 注释的唯一方法

CREATE TABLE PERSON (
     SSN   INT,
     NATIONALITY VARCHAR,
     NAME VARCHAR
  )
4

1 回答 1

11

对的,这是可能的。复合主键由多个主键字段组成。每个主键字段必须是 JPA 类型支持的一种。对于您的桌子,您有:

@Entity @IdClass(PersonId.class)
public class Person {
    @Id int ssn;
    @Id String nationality;
     ....
}

对于具有多个键的实体,JPA 需要定义一个特殊的 ID 类。此类应使用 @IdClass 注释附加到实体类。

class PersonId {
    int ssn;
    String nationality;
}

ID类反映主键字段,其对象可以表示主键值

于 2013-06-05T18:34:36.883 回答