2016-08-14 41 views
0

我有一個包含兩個表(城市,國家)和它們之間的兩個關係的數據庫。具有多個關係的表的休眠條件

第一個是「一個國家有多個城市」的關係。

select * from City inner join Country on(code=countrycode); 

第二個是「一個國家有一個資本」關係。

select * from City inner join Country on(capital=id); 

Hibernate標準適用於第一個關係,例如,

Criteria criteria = session.createCriteria(City.class); 
List<City> = criteria 
       .createCriteria("countrycode") 
       .add(Restrictions.eq("continent", continent)) 
       .list(); 

但我如何創建一個Hibernate標準來檢索首都清單?第二個關係是未映射的。 Hibernate是否支持這種關係?

城市類:

@Entity 
public class City { 

    @Id 
    @Column(name = "ID", updatable = false, nullable = false) 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    ... 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "countrycode", nullable = false) 
    private Country countrycode; 

    ... 

鄉村類:

@Entity 
public class Country { 

    @Id 
    private String code; 

    @OneToMany(targetEntity = City.class, mappedBy = "countrycode") 
    private Set<City> cities; 

    private Integer capital; 

    ... 
+0

城市實體中是否不應該註明資本是否屬於某個特定的城市? – Journeycorner

+0

我從mysql.com使用示例數據庫'world'。城市表中額外的布爾字段是不必要的恕我直言。我可以通過Hibernate查詢語言的theta連接來獲取大寫列表。 – Steve

回答

0

城市是否是任何國家的資本是城市內的信息。向城市添加一個布爾字段,查詢就像這樣:

List<City> = session.createCriteria(City.class) 
       .createCriteria("countrycode") 
       .add(Restrictions.eq("continent", continent)) 
       .add(Restrictions.eq("capital", true)) 
       .list(); 
+1

謝謝你的回答,Journeycorner。同時,我發現無法將Hibernate的標準API與未映射關係結合使用的信息。不過,我接受你的答案。 – Steve