2015-12-10 191 views
2

我想創建一個表,其中對象的primary key也應該用作兩個@ManyToOne表的foreign key如何將主鍵也用作JPA和Hibernate的外鍵引用?

如果不創建額外的表列既引用和重複相同的主鍵ID,這是可能的嗎?

實施例:

@Entity 
public class Person { 
    @Id 
    private int personId; 

    @ManyToOne 
    @JoinColumn(name="fk_address_id", [email protected](name="fk_address")) 
    private Address address; 

    @ManyToOne 
    @JoinColumn(name="fk_location_id", [email protected](name="fk_location")) 
    private Location location; 
} 

問題:@IdAddressLocation總是相同@IdPerson。 上面的映射將導致hibernate生成3列。 id, fk_address, fk_location,其中每列具有相同的值(id)。

問題:是否有可能只爲該人擁有primary key @Id,並且同時告訴hibernate這是另外一些@ManyToOne外鍵映射的外鍵,而不創建這些列?

+0

看看[這裏](http://stackoverflow.com/questions/29594577/hibernate-how-to-map-two-many-to-多對同一實體/ 29603999#29603999)帖子。 – wypieprz

回答

4

假設你有PersonPersonAddress間的一種一對一的關聯,並PersonLocation,你需要使用@MapsId JPA註解,因爲it is the best way to map a one-to-one table relationship

我爲此增加了一個示例on GitHub。基本上,你可以映射這樣的關聯:

@Entity(name = "Person") 
public class Person { 

    @Id 
    private Long personId; 

    @OneToOne 
    @MapsId 
    @JoinColumn(name = "personId") 
    private PersonAddress address; 

    @OneToOne 
    @MapsId 
    @JoinColumn(name = "personId") 
    private PersonLocation location; 
}