📜  @embeddedid (1)

📅  最后修改于: 2023-12-03 14:38:56.134000             🧑  作者: Mango

@EmbeddedId

@EmbeddedId是Java Persistence API (JPA)中的注释,用于把多个属性组合成一个复合主键。它允许开发者在一个实体类中定义多个属性,这些属性当作一个主键来使用。

用法
  1. 在实体类的类定义处,使用@IdClass注释指定该类使用了一个由另一个类定义的联合主键类。
@Entity
@IdClass(PersonPK.class)
public class Person {

    @Id
    private Long id;

    @Id
    @Column(name = "PERSON_NAME")
    private String name;

    private Integer age;

    // constructors and getters/setters
}
  1. 创建一个实现Serializable和equals和hasCode方法的联合主键类。
public class PersonPK implements Serializable {
    private Long id;

    private String name;
    
    // constructors, getters and setters, equals and hashcode
}
  1. 在实体类上使用@EmbeddedId注释注释该主键
@Entity
public class Person {

    @EmbeddedId
    private PersonPK personPK;

    private Integer age;

    // constructors and getters/setters
}
示例
@Entity
public class Employee {
    
    @EmbeddedId
    private EmployeeId id;
        
    private String name;
    
    private String department;
    
    // constructors and getters/setters
}

@Embeddable
public class EmployeeId implements Serializable {

    private Integer id;
    
    private String company;
    
    // constructors, getters and setters, equals and hashcode
}

以上示例定义了一个Employee实体类,它有一个EmployeeId属性用于实现复合主键。EmployeeId是一个嵌入式主键类,其中包含了一个id和一个company属性。Employee和EmployeeId之间是通过@EmbeddedId进行关联的。

结论

@EmbeddedId是JPA的一个强大注释,允许开发者轻松地定义实体类中的复合主键。通过在实体类上定义一个复合主键类并对其进行注释,开发者可以轻松地更改实体类的主键定义,而不需要更改表架构的定义。