2014-05-18 92 views
1

我試圖做到這一點,如:Hibernate的標準搜索與一個請求許多關係

session = HibernateUtil.getSessionFactory().openSession(); 
Criteria cr = session.createCriteria(Car.class); 
cr.createAlias("vendor", "vendor"); 

cr.add(Restrictions.eq("vendor.name", input)); 

results = (List<Car>) cr.list(); 

而且還喜歡:

session = HibernateUtil.getSessionFactory().openSession(); 
Criteria cr = session.createCriteria(Car.class); 
cr.createCriteria("vendor").add(Restrictions.eq("name", input)); 

results = (List<Car>) cr.list(); 

兩者的實現只是返回的所有數據,而不是與特定搜索查詢。

在汽車類我有關係:

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="id_vendor", nullable=false) 
public Vendor getVendor() { 
    return this.vendor; 
} 

而且我也已經有了在Vendor類在此我想搜索name列。

那麼我怎麼可能做這樣的搜索請求呢?

謝謝。

回答

0

您需要將您的條件分配回原始對象。

您將所有汽車退回的原因是因爲將您的供應商添加到查詢中的代碼行會爲您創建一個新的criteria對象,而您不會使用該對象。

變化:

session = HibernateUtil.getSessionFactory().openSession(); 
Criteria cr = session.createCriteria(Car.class); 
cr.createCriteria("vendor").add(Restrictions.eq("name", input)); //Does nothing 

results = (List<Car>) cr.list(); 

到這一點:

session = HibernateUtil.getSessionFactory().openSession(); 
Criteria cr = session.createCriteria(Car.class); 
cr = cr.createCriteria("vendor").add(Restrictions.eq("name", input)); 

results = (List<Car>) cr.list(); 

,它應該工作。

+0

我已經試過了。一切都是一樣的。 :( – user3623571

0

,如果你不會得到Car.class獨特的結果,您NEDD設置使用ResultTransformer

Criteria cr = session.createCriteria(Car.class); 
cr.createAlias("vendor", "vendor"); 

cr.add(Restrictions.eq("vendor.name", input)); 
crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
results = (List<Car>) cr.list(); 
相關問題