2012-12-18 86 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表上创建一个连接列。没什么不寻常的

相关问题