2014-09-01 75 views
0

你好,我是新來Hibernate和我正在試圖執行和使用Eclipse,但LogicalExpression將呈現休眠條件查詢()方法的錯誤,如錯誤「和」休眠標準的方法

在類型限制的方法和(標準,標準)是不適用的參數(判定基準,標準)

package actions; 

import java.util.Iterator; 
import java.util.List; 

import org.hibernate.Criteria; 
import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.criterion.LogicalExpression; 
import org.hibernate.criterion.Restrictions; 

public class Andrestriction { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     SessionFactory sf=new Configuration().configure().buildSessionFactory(); 
     Session sn=sf.openSession(); 

     Criteria cr=sn.createCriteria(PC.class); 

     Criteria id=(Criteria) Restrictions.gt("id",11); 
     Criteria os=(Criteria) Restrictions.ilike("os","d%"); 

     LogicalExpression and=Restrictions.and(id,os); //This line will show error like this:- 

     //The method and(Criterion, Criterion) in the type Restrictions is not 
     //applicable for the arguments (Criteria, Criteria) 

     cr.add(and); 

     List l=cr.list(); 
     Iterator itr=l.iterator(); 
     while(itr.hasNext()) 
     { 
      PC p=(PC)itr.next(); 
      System.out.println(p.getId()+"\t"+p.getName()+"\t"+p.getOs()); 

     } 

     sn.close(); 
    } 

} 

我想使用和爆擊eria在我的Query.Please告訴我如何解決這個問題。 預先感謝

回答

1

Restrictions.gt()返回一個SimpleExpression這是一個標準(實現標準)

所以,你不應該投射SimpleExpression的標準。你已經有一個標準(您可以創建它實際上轉變成一個查詢,並在數據庫中執行一個標準),所以你需要的是:

Criteria cr=sn.createCriteria(PC.class); 

    Criterion id=Restrictions.gt("id",11); // No need to cast as SimpleExpression implements Criterion 
    Criterion os= Restrictions.ilike("os","d%"); 

    LogicalExpression and=Restrictions.and(id,os); 

    cr.add(and); 

編譯器錯誤顯示,因爲你正在傳遞兩個條件的對象,以和( )限制類的方法,但它期望Criterion對象。所以如上所述改變它,你很好做。

+0

代碼得到執行..感謝gomyes。 – 2014-09-01 21:10:25

0

作爲該錯誤消息表示沒有匹配Restrictions.and方法用給定的簽名。遇到這些類型錯誤時,首先應該查閱的地方是文檔 - 然後回到解決預期/實際類型的問題。

若要解決此問題,請刪除(無效)強制類型併爲變量使用正確的類型;

// Criterion, not Criteria - also no cast 
Criterion id = Restrictions.gt("id",11); 
Criterion os = Restrictions.ilike("os","d%"); 

// Now it matches `and(Criterion, Criterion)` 
LogicalExpression and = Restrictions.and(id, os); 

標準(或標準)是標準的集合;但現代英語用法有點鬆懈。