没有@EmbeddedId的复合键

时间:2012-07-13 18:26:09

标签: hibernate annotations composite-primary-key

有没有办法在Hibernate中使用注释创建复合键,而无需创建新的PK类(即@EmbeddedId)?

我的问题是,我有一个具有许多属性的抽象类CommonClass,我需要为许多实体类继承它。每个类都有不同类型的id,但它们都需要是一个具有CommonClass属性的复合键。 例如:

@MappedSuperclass
abstract class CommonClass {
    @Id
    int typed;

    int a0;
    int a1;
    //many other attributes
}

@Entity
class EntityString extends CommonClass {
    @Id
    String id;
    //ID need to be id+typed from CommonClass

    //other attributes
}

@Entity
class EntityInteger extends CommonClass {
    @Id
    Integer id;
    //ID need to be id+typed from CommonClass

    //other attributes
}

那么,最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

以下休眠doc的第2.2.3.2.2节。

  

另一种可以说更自然的方法是将@Id放在多个上   我的实体的属性。这种方法仅由Hibernate支持   但不需要额外的可嵌入组件。

@Entity
class Customer implements Serializable {
  @Id @OneToOne
  @JoinColumns({
    @JoinColumn(name="userfirstname_fk", referencedColumnName="firstName"),
    @JoinColumn(name="userlastname_fk", referencedColumnName="lastName")
  })
  User user;

  @Id String customerNumber;

  boolean preferredCustomer;
}

@Entity 
class User {
  @EmbeddedId UserId id;
  Integer age;
}

@Embeddable
class UserId implements Serializable {
  String firstName;
  String lastName;
}