Использование Hibernate для извлечения записей на основе количества записей в другой таблице - PullRequest
0 голосов
/ 19 августа 2010

У меня есть таблица Users, которая содержит два разных типа пользователей (A и B). Пользователи типа A могут иметь отношения с пользователями типа B (что записано в таблице отношений). Количество отношений, которые пользователь типа А может иметь с пользователями типа В, записывается в поле другой таблицы.

Я хочу, чтобы Hibernate возвращал всех пользователей типа A, у которых не установлены все их отношения. У меня есть SQL-запрос, который сделает это. Что мне нужно сделать?

EDIT

Мне удалось заставить это работать, бросив мой запрос в session.createSQLQuery (), но кажется странным иметь блок SQL в середине всего этого удивительного гибернационного кода. Я думаю, я бы предпочел использовать его в объектах HSQL или Hibernate, если это возможно.

Это псевдопросмотр, который я пытаюсь преобразовать в HSQL:

select userId 
from (
  select user_id, max_mentees, count(connection_id) num_mentees 
  from user_table 
  join mentor on mentor_id = user_id and user_status = 'ACTIVE'
  left join connections on connection_mentor_id = mentor_id 
    and connection_status = 'ACTIVE' and connection_end > sysdate 
  group by user_id, max_mentees, connection_id
)
where (max_mentees > num_mentees) 
group by user_id

Ответы [ 3 ]

0 голосов
/ 19 августа 2010

Предполагая, что у вас есть класс Mentor, который имеет отношение один ко многим с классом MentorRelationship, вы должны сделать что-то вроде этого:

session.createQuery("from Mentor mentor where mentor.menteeRelationships.size < mentor.menteeRelationships.maxNumberOfRelationships")
0 голосов
/ 20 августа 2010

Я хочу, чтобы Hibernate возвращал всех пользователей типа A, у которых не установлены все их отношения.У меня есть SQL-запрос, который сделает это.Что мне нужно сделать?

Честно говоря, ваш вопрос все еще очень неясен (по крайней мере, для меня), и, не видя SQL, не видя вашу объектную модель и сопоставления, кажется, трудноточнее, и я бы предложил:

Если вы ожидаете более подробного ответа, вам следует предоставить более подробную информацию.

0 голосов
/ 19 августа 2010

Это может помочь:

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#querysql-load

Я знаю, что вы можете сделать это в файле сопоставления;не знаю, как это работает с аннотациями.

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