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中的子查询