2010-12-10 47 views
1

我有兩個實體...休眠findByExample與非原始成員

文件和用戶

文件具有@ManyToOne參考用戶與成員以下注釋:

@ManyToOne 
@JoinColumn(name="user_id") 
private User user 

我試圖通過使用「findByExample」方法找到用戶的所有文件。

我創建了一個File實例和一個User實例(使用用戶名設置)。我已經添加用戶添加到文件實例的實例,並通過它來「findByExample」是這樣的:

Criteria crit = getSession().createCriteria(File.class); 
Example ex = Example.create(exampleInstance); 
crit.add(ex); 
return crit.list(); 

不幸「名單()」返回我的數據庫中的所有文件,不只是那些指定的用戶。我檢查了生成的SQL,我發現它沒有檢查User對象的任何值,只是加入表並執行「where(1 = 1)」。

當執行「findByExample」查詢時,hibernate是否有可能檢查非原始成員?

回答

1

老TODO在org.hibernate.criterion.Example班線207解釋了這個問題:

//TODO: get all properties, not just the fetched ones! 
Object[] propertyValues = meta.getPropertyValues(entity, getEntityMode(criteria, criteriaQuery)); 

我的解決方法是撰寫與示例對象標準(以下原題):

Criteria crit = getSession().createCriteria(File.class); 
Example ex = Example.create(exampleInstance); 
crit.add(ex).add(Restrictions.eq("user", exampleInstance.getUser())); 
return crit.list();