У меня есть класс 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.
какая-либо подсказка, что я делаю неправильно?
Спасибо, Ронен.