Hibernate проекция на собственность многие ко многим - PullRequest
0 голосов
/ 21 апреля 2011

Я использую Hibernate 3.3.2.У меня есть класс A, который имеет свойство b, которое отображает отношение многих ко многим с B.

Класс A имеет следующее отображение:

<set name="b" table="a_b" lazy="true">
   <key column="id_a"/>
   <many-to-many class="B" column="id_b" outer-join="auto" />
</set>

:

Criteria c = HibernateUtil.getSession().createCriteria(A.class);
ProjectionList pl = Projections.projectionList();
pl.add(Projections.property("id_a"), "id_a");
pl.add(Projections.property("b"), "b");
c.setProjection(pl);
c.add(Restrictions.eq("id", id));
Object o = c.list();

Этот код не загружает ни одного экземпляра B;элемент, соответствующий b в возвращенном ArrayList, является нулевым.У вас есть идеи?

Спасибо.

Ответы [ 2 ]

1 голос
/ 22 июля 2013

Код, который вы предоставили, выбирает список объектов B определенной строки A.Вы должны выполнить объединение в обратном порядке, выбрать B и присоединиться к A, просто чтобы ограничить запрос:

Criteria c = HibernateUtil.getSession().createCriteria(B.class);
c.createCriteria("a").add(Restrictions.eq("id", id));
List<B> o = (List<B>) c.list();

Приведенный выше код должен помочь.

0 голосов
/ 21 апреля 2011

Поскольку fetchType ленив, вам нужно создать псевдоним для b: c.createAlias ​​(...), чтобы hibernate присоединился к A с B.

...