2012-12-18 85 views
2

我知道使用HQL查詢可以很容易地解決這個問題,但是我最好只是讓Hibernate爲我處理一些OneToMany屬性。Hibernate:兩個OneToMany屬性,由具有不同列的相同實體映射

讓我證明什麼,我想我的域模型看起來像在僞代碼:

Game 
    Long GameID 
    Team HomeTeam 
    Team AwayTeam 
    @OneToMany(mappedBy="team") 
    Set<TeamPlay> HomeTeamPlays 
    @OneToMany(mappedBy="team") 
    Set<TeamPlay> AwayTeamPlays 

表結構是相似的,有兩個外鍵都指向隊表在遊戲桌上。顯然,如果只有一個外鍵,那麼它將代表一個真正的一對多關係,但實際上我想要的是對於相同實體子類型的兩個雙向一對多特性。

我不相信使用@Where註釋會工作,因爲它需要一個常量,並且@JoinColumn在這裏是不允許的。如果不可能,那就沒問題,我只是想從別人那裏得到它。

+1

問題是什麼?你的問題是什麼?只是不要爲兩個關聯使用相同的mappedBy字段。 –

回答

6

我敢打賭,你並不真正瞭解使用mappedBy。

你可以參考我的其他答案https://stackoverflow.com/a/13812047/395202

簡而言之,是的mappedBy在雙向關係的「對面」的屬性名稱。

對於你的情況下,它可能看起來像:

class TeamPlay { 
    @ManyToOne 
    Team homeTeam; 

    @ManyToOne 
    Team awayTeam; 
} 

class Team { 
    @OneToMany(mappedBy="homeTeam") 
    Set<TeamPlay> homeTeamPlays; 

    @OneToMany(mappedBy="awayTeam") 
    Set<TeamPlay> awayTeamPlays; 
} 
+0

謝謝,我認爲這是它的工作原理,但我收到了ManyToOne屬性無法找到的異常。我認爲這可能不是這種方式,但也許我完全遇到了一個不同的問題。感謝您的理智檢查! –

0

你的代碼沒有問題。我已經在TeamPlay類上使用@ManyToOne測試了它,它工作正常。按照預期在TeamPlay表上創建一個連接列。沒什麼不尋常的

相關問題