2010-03-23 45 views
2

我有一個ExamResult類,它有一個鏈接返回給它的父代Exam休眠 - 通過關聯的屬性進行篩選

我希望通過檢查結果的布爾屬性進行篩選。

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

我可以正確檢索所有行,不添加行3和4。隨着這些額外的線我得到以下錯誤:

org.hibernate.QueryException: not an association: exam 

我不確定我是否正在這個正確的方式。我不清楚hibernate tutorial

我使用的關係可以在this tutorial中看到。

ExamResult有:

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

考試

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

即使您正在使用本教程,您是否可以顯示您的實際映射,以便每個人都可以查看該映射? :) 謝謝! – 2010-03-23 18:37:47

+0

@Arthur Thomas - 我已經更新了相關協會。 – Pool 2010-03-23 18:46:04

回答

3

的問題是,在你的ExamResult映射應該是:

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

否則,您的標準假設你在Exam中有一個布爾屬性primaryExam,看起來很好。

+0

謝謝 - 這現在顯示'org.hibernate.MappingException:在實體映射中的重複列:考試列:exam_id(應該映射與插入=「假」更新=「假」) - 我假設重複列是要做在教程中使用hibernate技巧。 – Pool 2010-03-23 20:38:33

+0

你可以粘貼完整的ExamResult嗎?嘗試刪除名稱=「exam_id」部分。如果你沒有映射到一個已經存在的數據庫,它就是useles。順便說一句,如果答案是有用的,不要忘記upvote或接受它:-)。 – 2010-03-24 01:03:05