在hibernate中创建内部查询

时间:2013-08-22 12:28:23

标签: java hibernate

如何在hibernate内部查询中添加set parameter()metheod?

我尝试这样做但已经有错误

这是我的代码

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();

3 个答案:

答案 0 :(得分:3)

我对您的查询做了一些更正: qt。 supQuotation有一个空间,我已经删除了 2.你子查询中的设备没有别名,我加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();

告诉我,如果没问题

如果不行,请在此处发布错误,并检查您是否已将hibernate mappping文件放入您的课程

答案 1 :(得分:2)

来自Hibernate Documentation:

  

通过SQLQuery控制本机SQL查询的执行   interface,通过调用Session.createSQLQuery()。

获得
  • createQuery()使用HQL语法创建Query对象。
  • createSQLQuery()使用本机SQL语法创建Query对象。

因此,将createQuery替换为createSQLQuery以进行本机SQL查询。

答案 2 :(得分: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();