我是新手,今天我尝试使用返回所选行结果的方法来播放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]
答案 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();