Запрос на три таблицы с проекцией идентификатора - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть таблица X: Id, Name
У меня есть таблица Y: Id, Name, X_Id
У меня есть таблица Z: Id, Y_id

Как я могу выполнить запрос критерия или запрос HQL, который вернул бы все идентификаторы объектов Z, которые связаны с объектом X.

(в моем случае X - это пространство беседы, Y - это беседы, а Z - категории)

HBM:

Объект беседы имеет следующее сопоставление для категорий:

<set name="allCatIdSet" table="CATEGORIES"  lazy="true">
      <cache usage="read-write" />
      <key>
        <column name="ITEM_ID" index="MY INDEX"/>
      </key>
      <element type="string">
        <column name="VALUE" length="64" index="MY INDEX"/>
      </element>      
</set>

И внешний ключ для идентификатора пространства беседы:

<property name="conversationSpaceId" length="64" index="CONVSPACEINDEX"/>

1 Ответ

1 голос
/ 13 декабря 2011

Короткий вопрос, короткий ответ:

public List<Z> findZbyX(X x) { 
  // query Z objects 
  String hql = "FROM Z z WHERE z.y.x = :x"
  Query query = sessionFactory.getCurrentSession().createQuery(hql);
  query.setParameter("x", x);
  return query.list();
}

Это вернет список объектов Z, если вам действительно нужен список идентификаторов Z, измените HQL на SELECT z.id FROM Z z WHERE z.y.x = :x.

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