2014-05-20 31 views
1

我有這樣的一個表這種關係:Java中,一個數據庫字段引用多次

@ManyToOne 
    @JoinColumn(name="TEAM_HOME", nullable=false) 
    private Team team; 

    @Column(name="TEAM_AWAY", insertable=false, updatable=false) 
    private int teamAway; 

而在其他這種關係:

@XmlTransient 
    @OneToMany(mappedBy="team",fetch=FetchType.EAGER) 
    private Set<Result> result; 

我要引用從表隊一列表結果多次,賭我不知道如何。我嘗試過不同的方式,但沒有成功。

+0

我不完全明白你想要做什麼。你能更精確嗎?你想要一個@ManyToMany關係嗎?或者你想把teamAway變成一個ManyToOne隊? – EasterBunnyBugSmasher

+0

它也有助於看到更多的類,如姓名等。 – EasterBunnyBugSmasher

+0

我有兩張表 - 團隊和結果。團隊表格包含有關團隊(團隊名稱.....)的信息,結果表格包含有關結果的信息。球隊正在相互競爭。我想要做的就是在結果表中放置關於團隊比賽結果的信息。結果表必須包含列:TeamHome,TeamAway,ScoreHome,ScoreAway,其中(TeamHome和TeamAway)都是從表格隊引用的。 – Marci

回答

0

您將需要從二隊關係結果:

@OneToMany(mappedBy="teamHome",...) 
private Set<Result> resultsHome; 

@OneToMany(mappedBy="teamAway",...) 
private Set<Result> resultsAway; 

,但沒有什麼可以阻止您添加的方法,如

public Set<Result> getResults() { 
    Set<Result> results = new HashSet<>(); 
    results.addAll(resultsHome); 
    results.addAll(resultsAway); 
    return results; 
} 

public void addResult(Result result) { 
    if (result.teamHome == this) { 
     resultsHome.add(result); 
    } else { 
     resultsAway.add(result); 
    } 
} 

我想這是不是你所希望看到的。但是將所有結果放入同一個集合中並不正確,因爲它們有所不同。畢竟,你可能會想要一些類似於你的「離開」的相反結果 - 該集合中的匹配。

你應該真的問自己,如果你真的想要你的團隊類中的2個關係。 DAO.getMatchesForTeam(...)不會達到同樣的目的嗎?當你真的想要製作一個體育賽事的模型時,你最終可能會與Team有很多關係,並且會混淆你的代碼。 @XMLTransient註解已經表明結果對團隊來說並不那麼重要,因爲它們會被運送到客戶端。

哦,順便說一句:團隊和結果之間有一些東西:比賽。結果只能保持結果。通過這種方式,您可以創建一個Result.inverse()方法,以便從其他團隊的角度給出結果。但沒有什麼比賽Match.inverse(),因爲主隊將永遠是主隊。

相關問題