gpt4 book ai didi

java - NamedQuery 连接和过滤集合

转载 作者:太空宇宙 更新时间:2023-11-04 15:04:07 26 4
gpt4 key购买 nike

我尝试执行此查询,但它仍然选择每个 child ,即使我只想要具有特定名称的 child 。我该如何实现这一目标?

@NamedQuery(name="Parent.getChildrenWithName",
query="SELECT p FROM Parent p "
+ "join p.children c "
+ "where c.name = :childName")
public class Parent
{
@OneToMany(cascade = CascadeType.ALL, mappedBy = "parentId")
private List<Child> children;
}

public class Child
{
@Column(name = "ChildName")
private String childName;

private int parentId;
}

请在 http://docs.oracle.com/javaee/6/tutorial/doc/bnbtl.html#bnbtr 上阅读此内容:

表达式无法导航到作为集合的关系字段之外(或进一步限定)。在表达式的语法中,集合值字段是终结符。由于teams字段是一个集合,因此WHERE子句不能指定p.teams.city(非法表达式)。

这是我获取结果的代码:

TypedQuery<Parent> query = em.createNamedQuery("Parent.getChildrenWithName", Parent.class);
query.setParameter("childName", "Daniel");
Parent parent = query.getSingleResult();

但问题仍然存在:)

最佳答案

更改您的代码,如下所示,

    TypedQuery<Parent> query = em.createNamedQuery("Parent.getChildrenWithName", Parent.class);
query.setParameter("childName", "Daniel");
Parent parent = query.getSingleResult();

关于java - NamedQuery 连接和过滤集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22229385/

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