gpt4 book ai didi

java - jpa 查询连接从 onetomany 获取

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:06 24 4
gpt4 key购买 nike

我有以下 2 个类,它们使用 JTA 事务类型和 openjpa 以及 derby 嵌入式数据库。我想要的是当我只有 WSpace id 时,在一个查询中获取父组织和请求的 WSpace。我对 JPA 很陌生,所以我一直在学习,并且一直在努力解决“q2”查询。我一直在使用查询“q0”和“q1”来调试和检查数据库中是否存在这些项目。 'q0' 与 'q1' 一样返回 1 个对象,而 'q2' 返回 0 个对象

我尝试了各种实体设置和不同的查询,但还没有任何效果。

原本,WSpace 类没有 Organization 字段,因为它似乎对于持久化或选择来说不是必需的,但我添加了它(以及mappedby 参数),以防查询工作需要它,但没有任何改变。

回到最初的问题,我怎样才能让它工作,以便它返回父对象以及所请求的单个子对象

SELECT o FROM Organisation o JOIN FETCH o.spaces w WHERE w.id = :id

这是我的类(class)

@Entity
public class Organisation implements MyObjects
{
@Id
@NotNull
private Integer id;
private String name;
@OneToMany( mappedBy = "organisation",
cascade = { CascadeType.PERSIST, CascadeType.MERGE } )
private List<WSpace> spaces;

//getters/setter below
}

And

@Entity
public class WSpace implements MyObjects
{
@Id
@NotNull
private Integer id;
private String name;
@ManyToOne
private Organisation organisation;
@OneToMany
private List<Application> apps;

//getters/setter below
}

class DAO
{
...

public void foo( Integer id )
{
....
String q0 = "SELECT o FROM Organisation o WHERE o.id = 49068";
List<Organisation> res0 = em.createQuery( q0, Organisation.class ).getResultList();
String q1 = "SELECT w FROM WSpace w WHERE w.id = " + id;
List<WSpace> res1 = em.createQuery( q1, WSpace.class ).getResultList();
String q2 = "SELECT o FROM Organisation o "
+ "JOIN FETCH o.spaces w WHERE w.id = " + id;
List<Organisation> res2 = em.createQuery( q2, Organisation.class ).getResultList();
...
}
}

最佳答案

您是否尝试在日志中查找 q2 查询的输出?我也在学习 JPA,最近正在处理 Criteria 和 QL 查询。因此,在遇到同样的连接问题后,我开始检查日志,结果很清楚,问题是什么,因为日志显示为 SQL 查询。另一件需要注意的事情是,您如何生成实体?我使用 Netbeans 为我生成它。另外,多对多关系也可能生成辅助类,我在其中一个项目中看到了它。希望它有帮助..

关于java - jpa 查询连接从 onetomany 获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35916100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com