2012-07-13 73 views
1

有沒有辦法在Hibernate中創建一個帶有批註的複合鍵,而不需要創建一個新的PK類(即@EmbeddedId)?沒有@EmbeddedId的複合鍵

我的問題是,我有一個抽象類CommonClass有很多屬性,我neen繼承它爲許多實體類。每個類都有一個不同類型的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 
} 

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

+0

您可以使用多個@Id屬性。我的答案是否適合你? – bvulaj 2012-07-13 19:29:24

回答

1

以下hibernate的第2.2.3.2.2節doc

另一種可以說是比較自然的方法是將@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; 
} 
+0

感謝您的回答,您必須注意,Customer實體必須實現Serializable,因爲它具有組合鍵。 – 2013-09-04 16:42:51