gpt4 book ai didi

java - JPA 子查询将列表返回到构造函数中

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

假设我们有多对多关系:

entity ChannelDO {
Long id;
String name;
Set<LanguageDO> languages;
}
entity LanguageDO {
Long id;
String name;
}

然后还有一个简单的类用于客户端和服务器之间的 REST 通信(由于某些原因,我从不让我的实体对象超出 EJB 方法):

public class ChannelListItem {
public Long id;
public String name;
public List<String> languages;
public ChannelListItem();
public ChannelListItem(Long id, String name, List<String> languages);
}

该类的对象在客户端呈现为类似表格的 View 。

我可以简单地选择一个实体对象列表并自己构建 ChannelListItems 的最终列表,但也许有一种方便的方法可以让 JPA(Hibernate)执行此操作。

我正在尝试这样的查询,但没有成功:

select new pkg.ChannelListItem( c.id, c.name,
(select cl.name from c.languages cl order by cl.name asc) )
from ChannelDO c
order by c.name asc

看来我的子查询只能返回单个值。 JPA 告诉我它需要最后一个参数为 String 类型而不是 List 类型的构造函数。

最佳答案

怎么样

select new pkg.ChannelListItem( c.id, c.name, c.languages )
from ChannelDO c
order by c.name asc

与 dto 类似

public class ChannelListItem {
public Long id;
public String name;
public List<String> languages;
public ChannelListItem();
public ChannelListItem(Long id, String name, List<ChannelDO> channels){
languages = new ArrayList<String>();
for(ChannelDO channel: channels)
languages.add(channel.getName())
//omitted
}
}

并回答您的问题:JPA 不支持 select 中的子查询。

关于java - JPA 子查询将列表返回到构造函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32631612/

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