有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate:两个OneToMany属性,由具有不同列的同一实体映射

我知道用HQL查询可以很容易地解决这个问题,但是我更喜欢让Hibernate为我处理一些OneToMany属性

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

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

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

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


共 (2) 个答案

  1. # 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;
    }
    
  2. # 2 楼答案

    你的代码没有问题。我在团队游戏课上用@ManyToOne测试过,效果很好。按预期在TeamPlay表上创建联接列。没什么不寻常的