我有这种情况,我映射
@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 获取的基本上,子实体存在于实体三中
提前感谢您的帮助,如果我不清楚,我非常渴望澄清自己。
实体中映射的字段应该与您在数据库表中实际拥有的字段相匹配。您似乎在上述实体和实体三之间有关联,但在这个实体和子实体之间没有关联。因此,数据库级别的这种不存在的关联也不应存在于实体级别。
但是您的实体可能有方法,可以导航到实体图:
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