【问题标题】:Hibernate - map multiple foreign keys on same tableHibernate - 在同一张表上映射多个外键
【发布时间】:2018-12-20 13:43:42
【问题描述】:

我有一个实体在同一张表上有两个外键,例如:

class A {
    B _source;
    B _target;
}
class B {
    List<A> _as;
}

我的问题是如何按源和目标映射所有“as”? 我正在使用休眠 4

【问题讨论】:

  • 你想让类 A 像父子一样包含与自身的关系吗?
  • 不,A类表示两个B实体之间的关系,B实体需要将他所有的关系都放在一个列表中。我找到的唯一解决方案是将“as”列表拆分为“sources”和“targets”。
  • 你的结构挺有意思的,你到底想实现什么?
  • 没什么特别的,我只是想从休眠中为我做一个“或”的提取选择,而不是两个当我需要 B 实体的所有“as”并避免使用两个 A 实体列表时。
  • 我仍然不清楚.. 除了当前的实现之外,您能否在问题中给出您的真实用例?

标签: java hibernate


【解决方案1】:

您无法映射所有内容,但可以实现以下目标:

public class A {
    @ManyToOne
    B _source;

    @ManyToOne
    B _target;
}

public class B {
    @OneToMany(mappedBy = "_source")
    List<A> sources;

    @OneToMany(mappedBy = "_target")
    List<A> targets;

    public List<A> getSources() {
        return sources;
    }

    public List<A> getTargets() {
        return targets;
    }

    public List<A> getAll() {
        return Stream.concat(getSources().stream(), getTargets().stream()).collect(Collectors.toList());
    }

}

使用getAll 方法。 (您可能还需要将distinct 应用于该流)

【讨论】:

  • 是的,但是我总是需要同时使用源和目标,而且它们是延迟加载的,所以休眠总是会为它们做两个选择。
猜你喜欢
  • 2014-01-15
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 2012-02-03
  • 2016-09-18
  • 2013-06-03
  • 1970-01-01
相关资源
最近更新 更多