2010-03-23 6 views
2

J'ai une classe ExamResult qui a un lien vers son parent Exam.Hibernate - filtrage par propriété associée

Je souhaite filtrer par une propriété booléenne sur le résultat de l'examen.

List<ExamResult> examResults = session 
        .createCriteria(ExamResult.class) 
        .createCriteria("exam") // 3. 
        .add(Restrictions.eq("primaryExam", Boolean.TRUE)) // 4. 
        .list(); 

Je peux récupérer toutes les lignes correctement sans ajouter les lignes 3 et 4. Avec ces lignes supplémentaires, je reçois l'erreur suivante:

org.hibernate.QueryException: not an association: exam 

Je ne suis pas sûr si je vais sur ce la bonne façon. Le hibernate tutorial n'est pas clair pour moi.

La relation que j'ai utilisée peut être vue dans this tutorial.

ExamResult a:

// bidirectional association! Needed to trick hibernate ;P 
@Column(name="exam_id", nullable=false, updatable=false, insertable=false) 
private Long exam; 

examen a

//----bidirectional association 
@OneToMany(mappedBy="exam") 
private final List<ExamResult> examResults = new ArrayList<ExamResult>(); 
+1

Même si vous utilisez le didacticiel, pourriez-vous montrer votre mapping actuel pour que tout le monde puisse le voir? :) Merci! –

+0

@ Arthur Thomas - J'ai mis à jour avec les associations pertinentes. – Pool

Répondre

3

Le problème est que la dans votre cartographie ExamResult devrait être:

@Column(name="exam_id", nullable=false) 
private Exam exam; 

Sinon, vos critères semble bien en supposant que vous avez une propriété booléenne primaryExam en Exam.

+0

Merci - ceci montre maintenant 'org.hibernate.MappingException: colonne répétée dans le mappage pour l'entité: colonne Exam: exam_id (doit être mappé avec insert =" false "update =" false ")' - Je suppose que la colonne répétée est à faire avec le truc d'hibernation dans le tutoriel. – Pool

+0

Pouvez-vous coller le ExamResult complet? Essayez de supprimer la partie name = "exam_id". Si vous ne mappez pas sur une base de données existante, il s'agit d'useles. BTW, si une réponse est utile, n'oubliez pas de upvote ou l'accepter :-). –

Questions connexes