【问题标题】:Hibernate: Two OneToMany properties, mapped by the same entity with different columnsHibernate:两个 OneToMany 属性,由具有不同列的同一实体映射
【发布时间】:2012-12-06 02:45:57
【问题描述】:

我知道这可以通过 HQL 查询轻松解决,但是我更喜欢简单地让 Hibernate 为我处理一些 OneToMany 属性。

让我演示一下我希望我的域模型在伪代码中的样子:

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

表结构类似,Game 表上有两个外键都指向 Team 表。显然,如果只有一个外键,那么它将代表真正的一对多关系,但实际上我想要的是同一实体子类型的两个双向一对多属性。

我不相信使用 @Where 注释会起作用,因为它需要一个常量,并且这里不允许使用 @JoinColumn。如果不可能,那没关系,我只是想从别人那里得到它。

【问题讨论】:

  • 有什么问题?你的问题是什么?只是不要对两个关联使用相同的 mappedBy 字段。

标签: java hibernate one-to-many


【解决方案1】:

我敢打赌,你并不真正了解 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;
}

【讨论】:

  • 谢谢,我认为这就是它的工作原理,但我遇到了无法找到 ManyToOne 属性的异常。我认为也许它没有以这种方式工作,但也许我遇到了一个完全不同的问题。感谢您的完整性检查!
【解决方案2】:

您的代码没有问题。我已经在 TeamPlay 类上使用 @ManyToOne 对其进行了测试,并且效果很好。按预期在 TeamPlay 表上创建连接列。没什么异常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2019-11-14
    • 1970-01-01
    相关资源
    最近更新 更多