【发布时间】:2020-04-22 18:48:42
【问题描述】:
我已经这样设置了 NamedQuery:
@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:
Parameter value [pt.project.entity.User@4125ce40] did not match expected type [java.util.Set (n/a)]
这里抛出异常:
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 设置为参数吗?
提前致谢。
【问题讨论】:
-
调用这个 namedQuery 时你传递了什么?如果您可以共享调用此命名查询并获得上述异常的代码。
-
当然。这里抛出异常:
public Channel findPrivateChannel1(String workspace, Set<User> channelSubscribers) { /// try { Channel pvtChannel = em.createNamedQuery("Channel.getPrivateChannel", Channel.class) .setParameter("channelOwnerWorkspace", selectedWorkspace) .setParameter("channelSubscribers", channelSubscribers).getSingleResult(); return pvtChannel; } catch (NoResultException e) { return null; } catch (Exception e) { return null; }导致第二个异常。
标签: hibernate jpa named-query