2013-09-25 96 views
1

我有一個通用條件查詢,它會返回相同的記錄。我認爲我的學生保存方法有問題。這是我的保存方法;休眠條件示例查詢獲取多條記錄

Student student = new Student(); 
    student.setId(Utility.generateUUID()); 
    student.setClassroom(selectedClassroom); 
    student.setUrl(urlAddress); 
    genericService.save(student); 

當我試圖從數據表,它返回3教室對象,該對象是相同的,但只有一個在課堂表記錄所有教室。問題是有3個學生記錄哪個教室引用了這個課堂記錄。

我的標準查詢;

@Transactional(readOnly = true) 
public <T> List<T> getByTemplate(T templateEntity) { 
    Criteria criteria = getCurrentSession().createCriteria(templateEntity.getClass()); 
    criteria.add(Example.create(templateEntity)); 
    return criteria.list(); 
} 

實體;

public class Classroom{ 

    .... 
    @OneToMany(mappedBy = "classroom", fetch = FetchType.EAGER) 
    private List<Student> studentList; 
} 


public class Student{ 

    @JoinColumn(name = "classroom", referencedColumnName = "id") 
    @ManyToOne(fetch = FetchType.LAZY) 
    private Classroom classroom; 
} 
+0

你爲什麼要手動設置'student'' id,你不讓'Hibernate'爲你管理它? – Atropo

回答

1

嘗試以下添加到您的標準:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

這將檢索不同的實體課堂甚至因子評分內連接選擇將檢索三行(每個用戶一個)。

+1

將屬性hibernate.show_sql屬性設置爲true會顯示執行的sql查詢。您將看到由Example.create()構建的INNER JOIN子句。 –

+0

@hellzone你解決了你的問題嗎? –

+0

是的,它解決了我的問題。謝謝。 – hellzone