2015-02-06 81 views
2

我怎樣才能hibernate O表,其主鍵也是外鍵使用PK的FK在JPA /休眠

因爲此架構模式:

CREATE TABLE policies (
    policy_id   int, 
    date_issued  datetime, 

    -- // other common attributes ... 
); 

CREATE TABLE policy_motor (
    policy_id   int, 
    vehicle_reg_no varchar(20), 

    -- // other attributes specific to motor insurance ... 

    FOREIGN KEY (policy_id) REFERENCES policies (policy_id) 
); 

CREATE TABLE policy_property (
    policy_id   int, 
    property_address varchar(20), 

    -- // other attributes specific to property insurance ... 

    FOREIGN KEY (policy_id) REFERENCES policies (policy_id) 
); 
  1. 這是可能的hibernate映射還是最好的是分開 他們並使用新的PK?
  2. 並且如果我在主表上使用自動遞增當然

回答

2

,您可以在有什麼?。

@Id 
@Column(name="policy_id") 
private policyId; 

@MapsId 
@OneToOne 
@JoinColumn(name = "policy_id") 
private Policy policy; 

您可以在主表,這意味着你需要使用JPA /休眠的IDENTITY發電機使用自動增量:此爲一到一個團體,你可以有非常有用。

@MapsId允許您與實體標識符屬性共享同一個SQL列。它指示Hibernate使用此列來解決@OneToOne@ManyToOne關聯。應始終通過@Id屬性傳播更改,而不是傳入到一側(在插入/更新期間忽略)。

+0

「@ MapsId」是什麼意思? – Youssef 2015-02-06 11:03:55

+0

檢查我的更新答案。 – 2015-02-06 11:13:46

+0

感謝人,它真的幫助我,因爲我使用hibernate工具,它生成了一個額外的表與@Embeddable的東西。 – Youssef 2015-02-06 11:33:55