Hibernate查询错误,集合定义为Set

时间:2011-12-16 14:24:40

标签: java hibernate jpa glassfish entitymanager

我的一个jersey-glassfish休息端点(来自域日志)抛出此错误:

  

引起:java.lang.IllegalArgumentException:为TypedQuery指定的类型[com.tanukis.streetama.entity.Flow]与查询返回类型[interface java.util.Set]不兼容       at org.hibernate.ejb.AbstractEntityManagerImpl.createNamedQuery(AbstractEntityManagerImpl.java:458)       at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createNamedQuery(EntityManagerWrapper.java:566)       在com.tanukis.streetama.dao.FluxManager.getBlacklist(FluxManager.java:571)

查询在orm.xml中定义:

SELECT DISTINCT s.blacklistedFlow FROM StreetamaUser s WHERE s.uid = :uid

这是我的StreetamaUser实体:

@ManyToMany(cascade= javax.persistence.CascadeType.ALL)
@JoinTable(
    name="ws_user_blacklist",
    uniqueConstraints = @UniqueConstraint(columnNames = { "blacklisted_flow_id", "user_id" }),
    joinColumns = {
        @JoinColumn(name="user_id",referencedColumnName="uid")
    },
    inverseJoinColumns = {
        @JoinColumn(name="blacklisted_flow_id",referencedColumnName="id")
    }
)
@XmlTransient
private Set<Flow> blacklistedFlow = new HashSet<Flow>();

查询电话:

List<Flow> result = em.createNamedQuery( "StreetamaUser.findBlacklist", Flow.class )
            .setParameter("iduser", uid )
            .setFirstResult(startitem)
            .setMaxResults(itemnbr)
            .getResultList();

我无法理解Hibernate异常。 getResultList返回一个列表,为什么它会抱怨查询返回类型?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用java.Util.List而不是Set。

答案 1 :(得分:0)

你没有。它始终是List,即使它不包含像set这样的重复值。我不明白为什么它首先是重要的。