2013-08-22 83 views
2

如何在休眠狀態下在內部查詢中添加一個set parameter()方法?在休眠狀態下創建內部查詢

我已經嘗試做這樣的,但是已經有一個錯誤

這是我的代碼

Query query=session.createQuery("select eq.euipmentName,eq.type from Euipment eq where eq.id in(select euipment from Quotation qt where qt. supQuotation=:ids)");   
query.setParameter("ids",id); 
list = (List<Euipment>)query.list(); 
+1

什麼是你的錯誤嘗試? – Alex

+0

我的錯誤是「----- Hibernate:select eq.euipmentName,eq.type from Euipment eq where eq。id in(select Quotes qt where qt。supQuotation =?的設備) 未知列'qt.supQuotation'in 'where clause'----「 – Dinesh

+0

我的錯誤是--Hibernate:選擇eq.euipmentName,eq.type from Euipment eq where eq。 ID in(從QT中選擇設備,其中qt。supQuotation =?) 'where子句'中的未知列'qt.supQuotation' - – Dinesh

回答

2

Hibernate Documentation:

執行原生SQL查詢通過的SQLQuery 被控制接口,它是通過調用Session.createSQLQuery()獲得的。

  • createQuery()創建使用HQL語法查詢對象。
  • createSQLQuery()使用本機SQL語法創建Query對象。

所以更換createQuerycreateSQLQuery對本地SQL查詢。

+0

什麼使得查詢爲SQL而不是HQL? – Stewart

+0

尊敬的先生,我嘗試過,但也有例外,我不知道如何使用引號和括號,它是rihgt? – Dinesh

+0

@Stewart:檢查此鏈接:http://stackoverflow.com/questions/4162838/hql-vs-sql-hibernate-netbeans-hql-editor –

3

我對你的查詢做了一些更正: 1. qt。 supQuotation有一個空間,我已經刪除 2.設備NASDAQ在你的子查詢中沒有別名,我添加了QT

String hql = 
    "select eq.euipmentName,eq.type " + 
    " from Euipment eq " + 
    " where eq.id in (select qt.euipment from Quotation qt where qt.supQuotation = :ids)"; 

Query query = session.createQuery(hql);   
query.setParameter("ids",id); 
list = (List<Euipment>)query.list(); 

告訴我,如果它是OK

如果不正確,請張貼在這裏的錯誤,並檢查是否已處於休眠mappping文件的類

0

與標準

Criteria c = getSession().createCriteria(Euipment.class, "e"); 
c.createAlias("e.quotation", "q"); // inner join by default 
c.add(Restrictions.eq("q.supQuotation", id));  
list = (List<Euipment>)c.list();