2015-12-10 159 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; 
}