2017-06-05 92 views
0

我使用Hibernate,我有實體:多對一和一對多

@Data 
@Entity 
public class Country { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private long id; 

    @Column(name = "country_nm") 
    private String countryName; 
} 

@Data 
@Entity 
public class City { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private long id; 

    @Column(name = "city_nm") 
    private String cityName; 
} 

國家可以有許多城市,城市只有一個國家。 關聯這些實體的最佳方式是什麼?

1)在City類中添加City city字段,並在其上添加@ManyToOne@JoinColumn偏移量?因此我們將有兩個表:countrycity,city表中將有country_id列。

2)添加Country country字段中Country類和@OneToMany(mappedBy='country')它上面和City類添加City city字段並添加上面@ManyToOne anotations?在這種情況下,將有三個表:countrycity並結合表country_city

+0

沒有「最佳」方式。這一切都取決於你想要和需要什麼。然而,你描述的兩種方法是不正確的,你對雙向關聯映射的理解是錯誤的。閱讀hibernate手冊。 –

+0

謝謝,我在做 – ru51an

回答

1

1)添加市市場在城市類,並添加它上面@ManyToOne和 @JoinColumn anotations?因此,我們將有兩個表: 國家和城市,城市表將有country_id列。

我想你的意思是在城市類中添加國家/地區字段,如果您打算使用單向關係,但是joinColumn不應該在擁有實體中,那應該是none擁有實體,所以你將不得不去國家班,並在那裏添加一個城市列表,並用@OneToMany用連接列對它們進行標註。

2)添加一個又一個國家領域的國家等級和 @OneToMany(的mappedBy =「國家」),它上面和城市新增城市城市場 類,並添加上面@ManyToOne anotations?在這種情況下,將 是三個表:國家,城市和組合表country_city

有很多錯誤的東西這個解決方案,首先你不能有「@OneToMany(的mappedBy ='國家)」這樣,你只有當你應用第一種解決方案,並且你想使關係成爲雙向的,並且即使這不會生成第三個類時,如果你想要生成第三個類,你將需要在你的類中使用@JoinTable而不是@ JoinColumn