Запрос гибернации на четыре таблицы - PullRequest
0 голосов
/ 03 июня 2010

У меня три таблицы.

  • вопрос (forumId as FK)
  • ответ (вопрос указан как FK)
  • Форум
  • участник форума (forumId as FK)

Может быть несколько форумов, поэтому я хочу добавить метод, который возвращает мне все ответы от участника данного форума.

Я не знаю, что такое запрос гибернации, который я могу сделать. Чтобы получить список ответов, привязанных к данному участнику, я делаю это

return HibernateUtil.query(Answer.class,"authorId",member.getId());

Что я могу сделать, чтобы получить список ответов от участника данного форума.

Ответы [ 2 ]

1 голос
/ 03 июня 2010

Вы слишком много думаете о таблицах и недостаточно об объектах. Hibernate - это инструмент объектно-реляционного отображения.

Я вижу здесь четыре объекта:

  1. Вопрос; есть коллекция ответов
  2. Ответ
  3. Форум; имеет коллекции вопросов и участников
  4. Член; есть коллекции вопросов и ответов

Другие отношения зависят от того, являются ли отношения однонаправленными или двунаправленными.

Начните думать с точки зрения объектов, и Hibernate будет намного проще.

Если у вас нет или вам не нужны объекты, не используйте Hibernate. Просто перейдите к прямому JDBC, выполните JOIN и отобразите результат в объект или структуру данных в этом случае.

0 голосов
/ 03 июня 2010

Использовать HQL:

public List<Answer> getMemberAnswers(Forum forum, Member member) {
  return getSession().createQuery(
    "select f.answers from Forum f " +
    "join f.member m " +
    "where f.id = :forumId " +
    "and m.id = :memberId")
  .setInteger("forumId", forum.getId())
  .setInteger("memberId", member.getId())
  .list();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...