2011-12-16 2 views
0

Эта ошибка возникает из одного моего джерси-GlassFish покоя конечной точки (из журналов домена):Hibernate ошибка запроса с коллекцией определяется как совокупность

вызвано следующими причинами: java.lang.IllegalArgumentException: Тип указано для TypedQuery [ com.tanukis.streetama.entity.Flow] несовместим с типом возвращаемого запроса [interface java.util.Set] at 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 возвращает список, поэтому почему он жалуется на тип возвращаемого запроса?

+0

Если вы проголосуете, скажите, почему ... Спасибо –

ответ

0

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

+0

Я знаю, что с ** Jackson ** вы можете избежать стирания стилей с помощью org.codehaus.jackson.map.type.TypeReference. Любой способ сделать что-то подобное и избежать исключения спящего режима? –

1

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

+0

Спасибо за ваш ответ. Hibernate не нравится List (Bag semantic). Поскольку список не должен содержать дубликат, здесь значение имеет смысл ... Но да, если нет другого решения, я могу обновить свою модель и использовать список –

Смежные вопросы