SQL Query Hibernate with子句在哪里

时间:2015-07-02 14:59:46

标签: java hibernate

如何在hibernate中查询

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

2 个答案:

答案 0 :(得分:0)

好像你缺少Select子句和表别名。 它应该像

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

答案 1 :(得分: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. 中的空格
  3. 指定result的类型(并进行投射) - 除非result是您未在示例代码中显示的字段
  4. 当然,请在查询中的属性之前移除e.(或将e添加为TableClass的别名)
  5. 您将返回List,但该方法指定了Double - 我不确定您要在此处执行什么操作,因此您需要自己解决这个问题。
  6. 代码现在看起来像

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