java - 将 oneToMany 与可连接但一起使用,将其映射到子实体

标签 java hibernate join

我在 map 上遇到这种情况

@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

提前感谢您的帮助,如果不清楚,我非常渴望澄清自己。

最佳答案

实体中映射的字段应该与数据库表中实际拥有的字段相匹配。看来您在上述实体和 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

关于java - 将 oneToMany 与可连接但一起使用,将其映射到子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062681/

相关文章:

postgresql - Grails 3.1.5和Postgresql的多个数据源

php - 如何通过 Zend Framework 2 加入 LIKE

MySQL 加入 3 个表

sql - 我可以用纯 SQL 做这种连接操作吗?

java - Angular 2 与现有 Java 应用程序

java - Java中类之间的方法可见性

java - Proto3编译器没有为Map字段生成put方法

java - 我如何从 org.springframework.jdbc.datasource.DriverManagerDataSource 类获取 jdbc 连接

mysql - JPA 不允许实体由来自多个表的列组成?

Java - 在给定偏移处读取字节