将oneToMany与jointable一起使用,但将其映射到子实体

时间:2013-09-28 02:47:25

标签: java hibernate jointable

我有这种情况我在哪里映射

@OneToMany
@OrderBy(value="id desc")
@JoinTable(name="EntityOne",
joinColumns = @JoinColumn(name="EntityTwo_id", referencedColumnName="id"), inverseJoinColumns = @JoinColumn(name="EntityThree_id", referencedColumnName="id"))
private List<EntityThree> samples = Lists.newArrayList();

这很好用,但是,我想知道是否有办法将它映射到EntityThree的子实体。例如,要获得

 private List<SubEntity> samples = Lists.newArrayList();

其中,SubEntity来自EntityThree.getSubEntity 基本上,subEntity存在于EntityThree

如果不清楚,请提前感谢您的帮助,而不是急于澄清自己。

1 个答案:

答案 0 :(得分:1)

实体中映射的字段应该与您在数据库表中实际拥有的字段匹配。您似乎在上述实体和EntityThree之间存在关联,但在此实体和SubEntity之间没有关联。因此,数据库级别的这个不存在的关联也不应该存在于实体级别。

但是您的实体可能有方法,可以导航到实体图:

public List<SubEntity> getSubEntities() {
    List<SubEntity> result = Lists.newArrayListWithExpectedSize(samples.size());
    for (EntityThree sample : samples) {
        result.add(sample.getSubEntity());
    }
    return result;
}

或以功能方式:

public Iterable<SubEntity> getSubEntities() {
    return Iterables.transform(samples, new Function<EntityThree, SubEntity>() {
        @Override
        public SubEntity apply(EntityThree input) {
            return input.getSubEntity();
        }
    });
}

您也可以使用查询:

select sub from MyEntity m 
inner join m.samples sample 
inner join sample.subEntity sub
where m.id = :theId