hibernate java选择查询

时间:2012-03-05 13:36:44

标签: java hibernate

我是新手,今天我尝试使用返回所选行结果的方法来播放hibernate ...如果选中则可以返回int中的结果..这是我的方法

 public int validateSub(String slave, String source, String table){
    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();


    Query q = session.createQuery("from Subscribers where slave = :slave AND source = :source AND tbl = :tbl");
    q.setParameter("slave", slave);
    q.setParameter("source", source);
    q.setParameter("tbl", table);

    int result = q.executeUpdate();

    return result;

}
从这个方法

我试图验证我从Subscribers表中得到的3个值,但最后我试图编译有这个错误

     Exception in thread "Thread-0" org.hibernate.hql.QueryExecutionRequestException: Not supported for select queries [from com.datadistributor.main.Subscribers where slave = :slave AND source = :source AND tbl = :tbl]

5 个答案:

答案 0 :(得分:2)

在这里你要选择记录,这样就可以没有选择关键词

sessionFactory sesionfatory;
ArrayList list = (ArrayList)sessionfactory.getCurruntSession().find(from table where name LIKE "xyz");

long size = list.get(0);

答案 1 :(得分:2)

您可以查看以下链接,了解 executeUpdate 的工作原理,一个来自hibernate文档,另一个来自JPA的java文档,它定义了方法抛出异常的时间

http://docs.oracle.com/javaee/6/api/javax/persistence/Query.html#executeUpdate()

https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#executeUpdate()

或者你可以使用

 List list = query.list();    
 int count = list != null ? list.size() : 0;
 return count; 

答案 2 :(得分:1)

你正在运行一个select查询,尽管你没有在这里使用select关键字,但hibernate将把它作为生成的SQL的一部分添加。

要避免异常,你需要做的就是说

q.list();

现在,这将返回一个List(here是文档)。 如果你想要获得你可以说的元素的大小

    Query q = session.createQuery("select count(s) from Subscribers s where slave = :slave AND source = :source AND tbl = :tbl");
Long countOfRecords = (Long)q.list().get(0);

你也可以在HQL中执行更新语句,它遵循与SQL类似的结构(除了对象和属性)。

希望这有帮助。

答案 3 :(得分:0)

我今天也碰巧犯了同样的错误 您的SQL语句不正确。

您可以尝试:

DELETE from Subscribers WHERE slave = :slave AND source

答案 4 :(得分:0)

试试这个:

int result = q.list().size();