2015-07-02 690 views
0

应怎样查询休眠SQL查询休眠与where子句中

public Double getValuPrice(int param1, int param2){ 

     Query query = session.createQuery("FROM TableClass WHERE e.product= :param1 and e.type = :param2"); 
     query.setParameter("param1 ",param1); 
     query.setParameter("param2",param2); 

     result = query.uniqueResult(); 
     List lista = query.list(); 

     return lista; 
} 

,我想表现出一个Servlet

List list = classDao.getValuPrice(origem, destino); 

out.println("<h1>" + list.eq(0) + "</h1>"); 

回答

0

在查询你正在做from TableClass然后WHERE e.product = :param1。我会认为这会给你错误Unable to resolve path [e.product], unexpected token [e]。你的参数中还有一个流氓空间,它会给你一个could not locate named parameter [param1 ]错误。

你不这样做,但是,需要select *列宁的回答的建议(见Hibernate manual (v4.3 §11.4.1 "Executing Queries")

所以纠正这些:

  1. 删除"param1 "
  2. 空间指定类型result(并进行演员表) - 除非result是您未在示例代码中显示的字段
  3. 并且当然删除了e. befo在查询重写你的属性(或添加eTableClass别名)
  4. 您在返回List但该方法规定了Double - 我不知道你想在这里做什么,所以你需要的工作,你自己。

代码现在看起来像

public Double getValuPrice(int param1, int param2){ 
    Query query = session.createQuery("FROM TableClass WHERE product= :param1 and type = :param2"); 
    query.setParameter("param1",param1); 
    query.setParameter("param2",param2); 
    // assuming result is a field with type TableClass  
    result = (TableClass)query.uniqueResult(); 
    List lista = query.list(); 

    return lista; // <-- fix the return statement 
} 

如果你想返回特定领域上TableClass,这是一个Double(如double price;)然后执行:

Query q = session.createQuery("select price from TableClass WHERE product= :param1 and type = :param2" 
... 
Double result = ((Number) q.uniqueResult()).doubleValue(); 
+0

酷我教新事情与你的答案,我已经解决了错误,现在工作ty :) –

0

返回的值好像你缺少选择条款和表的别名。 应该是这样

Query query = session.createQuery("Select * FROM TableClass e WHERE e.product= :param1 and e.type = :param2");