Ошибка запроса гибернации с коллекцией, определенной как Set - PullRequest
0 голосов
/ 16 декабря 2011

Эта ошибка выдается с одной из моих конечных точек отдыха jersey-glassfish (из журналов домена):

Причина: java.lang.IllegalArgumentException: тип, указанный для TypedQuery [com.tanukis.streetama.entity.Flow], несовместим с типом возврата запроса [interface java.util.Set] в org.hibernate.ejb.AbstractEntityManagerImpl.createNamedQuery (AbstractEntityManagerImpl.java:458) в com.sun.enterprise.container.common.impl.EntityManagerWrapper.createNamedQuery (EntityManagerWrapper.java:566) at 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 ]

1 голос
/ 19 декабря 2011

Вы можете попробовать использовать java.Util.List вместо Set.

0 голосов
/ 16 декабря 2011

Ты не. Это всегда List, даже если он не содержит повторяющихся значений, таких как set. Я не понимаю, почему это важно.

...