【发布时间】:2023-11-07 23:01:01
【问题描述】:
我是 JPA/JPQL 方面的初学者,当我建立双向关系时,我在获取多对一关系时遇到了问题。这是 JPQL:
select c from Child c join fetch c.parent
这是两个简单的类:
@Entity
public class Parent {
@Id
private int id;
private String title;
@OneToMany(mappedBy = "parent")
private Set<Child> children;
}
@Entity
public class Child {
@Id
private int id;
@ManyToOne(fetch = FetchType.LAZY)
private Parent parent;
}
datanucleus 执行的等效 SQL 查询为:
SELECT 'com.*.Child' AS NUCLEUS_TYPE,`C`.`ID`,`C`.`PARENT_ID` FROM `CHILD` `C` INNER JOIN `PARENT` `B0` ON `C`.`PARENT_ID` = `B0`.`ID`
现在,如果我完全删除 Parent 中对“children”的引用,那么 SQL 正是我所需要的:
SELECT 'com.*.Child' AS NUCLEUS_TYPE,`C`.`ID`,`B0`.`ID`,`B0`.`TITLE` FROM `CHILD` `C` INNER JOIN `PARENT` `B0` ON `C`.`PARENT_ID` = `B0`.`ID`
明确一点:我想要实现的是使用我的 JPQL 查询获取孩子的父母。
更新:我刚刚用 EclipseLink 尝试了这两个类,这很有效,所以看起来这个问题是 Datanucleus 特有的。
【问题讨论】:
-
如果你只想要父母而你有孩子,你可以说
FROM Parent p WHERE p.id = :parent_id -
我希望孩子和父母在一个查询/交易中进行
标签: java jpa orm jpql datanucleus