Запрос гибернации на примере - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть класс A, который имеет некоторые примитивные атрибуты, а также член типа B. Тип B имеет карту:

// отображение имени на число

private Map<String, Double> myMap   = null;

@ElementCollection(fetch=FetchType.EAGER)
@MapKeyColumn(name = "NAME")
@Column(name = "NUMBER")
@CollectionTable(name = "NAME_MAPPING", uniqueConstraints = { @UniqueConstraint(columnNames = { "NAME", "NUMBER" }) })
public Map<String, Double> getMyMap()
{
  return this.myMap;
}

Фрагмент A:

private String name = null;

private B b = null;

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "B_FK")
public B getB()
{
  return b;
}

Теперь я хочу найти A по Примеру.Я определил следующее:

public List<A> findByExample(A a) 
{
  Session session = getSession();

  Criteria criteria = session.createCriteria(A.class);
  Example example = Example.create(a);
  Criteria bCriteria = criteria.createCriteria("b");
  B b = material.getB();
  bCriteria.add(Example.create(b));

  criteria = criteria.add(example);
  criteria = criteria.setFetchMode("b", FetchMode.JOIN);

  return criteria.list();   
}

Я пробовал все виды вариаций, но безуспешно.метод возвращает все записи БД с одним и тем же A.name и игнорирует равенство Map в B.

какая-либо подсказка, что я делаю неправильно?

Спасибо, Ронен.

1 Ответ

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

В примерах ограничения игнорируются ассоциации (и, хотя это не документы, коллекции элементов). Даже если вы использовали только API Criteria (без использования Example), коллекции элементов не могут быть запросами с Criteria (se https://hibernate.onjira.com/browse/HHH-869).. Вам придется вернуться к ограничениям HQL или SQL.

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