2

如何在hibernate的内部查询中添加一个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();
4

3 回答 3

4

我对您的查询做了一些更正: 1. qt。supQuotation 有一个空格,我已经删除了 2. euipment 在你的子查询中没有别名,我添加了 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 映射文件放入您的类

于 2013-08-22T12:44:47.860 回答
1

休眠文档:

本机 SQL 查询的执行通过调用 Session.createSQLQuery() 获得的 SQLQuery 接口控制。

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

所以替换createQuerycreateSQLQuery原生 SQL 查询。

于 2013-08-22T12:34:25.627 回答
0

Try with Criteria

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();
于 2013-08-22T14:11:45.943 回答