首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在JPA NamedQuery中使用HashSet作为参数抛出IllegalArgumentException

在JPA NamedQuery中使用HashSet作为参数抛出IllegalArgumentException
EN

Stack Overflow用户
提问于 2020-04-23 02:48:43
回答 1查看 221关注 0票数 1

我设置了一个这样的NamedQuery:

代码语言:javascript
运行
复制
@Entity
@Table(name = "channel")
@NamedQuery(name = "Channel.getPrivateChannel", query = "SELECT pvt from Channel pvt WHERE pvt.state = 3 AND pvt.channelOwnerWorkspace = :channelOwnerWorkspace AND pvt.channelSubscribers = :channelSubscribers")
public class Channel implements Serializable {

...

@Column(nullable = false)
    private int type;

@ManyToOne
    @JoinColumn(name = "workspaceId")
    private Workspace channelOwnerWorkspace;

@ManyToMany(mappedBy = "subscribedChannels", fetch = FetchType.EAGER)
    private Set<User> channelSubscribers;

所有的变量都不为空并且存在;并且,当调用所述查询时,我会得到一个如下所示的IllegalArgumentException:

代码语言:javascript
运行
复制
Parameter value [pt.project.entity.User@4125ce40] did not match expected type [java.util.Set (n/a)]

异常在这里抛出:

代码语言:javascript
运行
复制
public Channel findPrivateChannel1(String workspace, Set<User> channelSubscribers) {


///

        Workspace selectedWorkspace = workspaceDAO.findByTitle(workspace);

        try {
            Channel pvtChannel = em.createNamedQuery("Channel.getPrivateChannel", Channel.class)
                    .setParameter("channelOwnerWorkspace", selectedWorkspace)
                    .setParameter("channelSubscribers", channelSubscribers).getSingleResult();

我做错了什么?是否可以将HashSet设置为参数?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-04-23 05:54:26

根据JSR-338的4.6.7项,等于比较运算符不能与整个集合一起使用:

顺便说一句,你使用两个完整列表进行比较的目的是什么还不清楚。更具体地说,您可以使用一些非常有用的集合表达式来选择您的实体,例如IN、MEMBER OF或IS EMPTY,甚至一些子选择(ANY、some或ALL)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61372818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档