Java,单个数据库列多次引用

时间:2014-05-20 16:56:17

标签: java database jpa relationship

我在这样的表中有这样的关系:

    @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;

我想在表格Result中多次引用表格Team中的一列,打赌我不知道怎么做。我尝试了不同的方法但没有成功。

1 个答案:

答案 0 :(得分: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);
    }
}

我想这不是你所希望的。但是将所有结果放在同一个集合中是不正确的,因为它是不同的。毕竟,你可能想要的东西就像你的&#34;远离&#34; -matches在该集合中的反向结果。

你应该问自己,你是否真的想在你的团队课程中找到这两个关系。难道DAO.getMatchesForTeam(...)没有同样的目的吗?当你真的想要制作一个体育赛事的模型时,你最终可能会在团队中找到很多关系,这会使你的代码变得混乱。 @XMLTransient注释已经表明结果对于团队传输到客户端而言并不重要。

哦,顺便说一句:团队和结果之间有一些东西:比赛。结果应该只保留结果。这样你就可以制作一个Result.inverse()方法,它可以从其他团队的角度给你结果。但是没有像Match.inverse()那样的东西,因为主队永远是主队。