休眠-在同一张表上映射多个外键

时间:2018-12-20 13:43:43

标签: java hibernate

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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应用于该流)