2010-06-03 4 views
0

J'ai trois tables.Requête Hibernate sur quatre tables

  • question (ForumID FK)
  • réponse (QuestionID FK)
  • forum
  • membre forum
  • (ForumID FK)

Il peut y avoir plusieurs forums si je veux ajouter une méthode qui me renvoie toutes les réponses d'un membre dans un forum donné. Je ne sais pas quelle est la requête d'hibernation que je peux faire. Pour obtenir la liste de réponse lié au membre donné que je fais ce

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

Que puis-je faire pour obtenir une liste de réponse d'un membre dans un forum donné.

Répondre

1

Vous pensez trop aux tables et pas assez aux objets. Hibernate est un outil de mapping objet-relationnel.

Je vois quatre objets ici:

  1. Question; a une collection de réponses
  2. Réponse
  3. Forum; a des collections de questions et de membres
  4. Membre; a des collections de questions et de réponses

D'autres relations dépendent de si les relations sont unidirectionnelles ou bidirectionnelles. Commencez à penser en termes d'objets et Hibernate sera beaucoup plus facile.

Si vous ne disposez pas ou ne voulez pas d'objets, n'utilisez pas Hibernate. Allez juste pour JDBC, faites le JOIN, et mappez le résultat dans un objet ou une structure de données dans ce cas.

0

Utilisation 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(); 
}