Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA子查询将列表返回到构造函数中_Java_Hibernate_Jpa - Fatal编程技术网

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

Java JPA子查询将列表返回到构造函数中,java,hibernate,jpa,Java,Hibernate,Jpa,假设我们有一种多对多的关系: entity ChannelDO { Long id; String name; Set<LanguageDO> languages; } entity LanguageDO { Long id; String name; } 我的子查询似乎只能返回单个值。JPA告诉我,它希望构造函数的最后一个参数是String类型,而不是List类型 select new pkg.ChannelListItem( c.id,

假设我们有一种多对多的关系:

entity ChannelDO {
    Long id;
    String name;
    Set<LanguageDO> languages;
}
entity LanguageDO {
    Long id;
    String name;
}
我的子查询似乎只能返回单个值。JPA告诉我,它希望构造函数的最后一个参数是String类型,而不是List类型

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

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
    }
}
公共类ChannelListItem{
公共长id;
公共字符串名称;
公共语言清单;
公共频道列表项();
公共频道列表项(长id、字符串名称、列表频道){
languages=newarraylist();
for(ChannelDO频道:频道)
languages.add(channel.getName())
//省略
}
}
回答你的问题:JPA不支持select中的子查询。

那怎么办

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

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
    }
}
公共类ChannelListItem{
公共长id;
公共字符串名称;
公共语言清单;
公共频道列表项();
公共频道列表项(长id、字符串名称、列表频道){
languages=newarraylist();
for(ChannelDO频道:频道)
languages.add(channel.getName())
//省略
}
}
回答您的问题:JPA不支持select中的子查询