Различные результаты извлечения результатов с API запросов и HQL - PullRequest
0 голосов
/ 19 октября 2010

У меня есть следующая сущность (не точная, но дает общее представление):

@Entity
public class WebElement implements Serializable {
   private static final long serialVersionUID = 1L;

   @Id
   @GeneratedValue
   private Long id;

   @ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
   private Set<CoreElement> coreElements;

   private String agent;

   // ... omitting const' get/set hashcode equals etc.
}
public class CoreElement implements Serializable {
   private static final long serialVersionUID = 1L;

   @Id
   @GeneratedValue
   private Long id;

   private String value;
   // ... omitting const' get/set hashcode equals etc.
}

Моя проблема при попытке получить WebElements с использованием Criteria API вместо HQL
При выполнении следующего я получаю пустой список.

getCurrentSession().createCriteria(WebElement.class)
                        .createCriteria("coreElements").add(
                                        Restrictions.eq("value", value)).list();

Но при выполнении следующего HQL я получаю правильный результат.

select distinct we from WebElement we, in(we.coreElements) core 
                                  where core.value = :inputValue

Можете ли вы помочь выяснить, что я делаю неправильно или отличается между этими вызовами?
( ПРИМЕЧАНИЕ Я предпочитаю работать с Criteria API вместо HQL.

Ответы [ 2 ]

0 голосов
/ 19 октября 2010

В вашем HQL вы создаете внутреннее объединение, которое заставляет Hibernate извлекать элементы.

В запросе критериев вы можете использовать setFetchMode () с помощью FetchMode.JOIN

Поскольку ваш запросstatic, я бы порекомендовал использовать HQL - это легче понять.

0 голосов
/ 19 октября 2010

Вы используете Restrictions.eq вместо Restrictions.in () .., как вы используете HQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...