[英]hibernate java select queries
我對此並不陌生,今天我嘗試使用一種返回選定行結果的方法播放休眠狀態...如果被選中,那么它可以將結果返回為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;
}
通過這種方法,我嘗試驗證從訂戶表中獲得的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]
在這里您要選擇記錄,因此無需選擇關鍵字就可以
sessionFactory sesionfatory;
ArrayList list = (ArrayList)sessionfactory.getCurruntSession().find(from table where name LIKE "xyz");
long size = list.get(0);
您可以看一下下面的鏈接,它們說明executeUpdate的工作方式,一個來自休眠文檔,另一個來自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;
您正在運行選擇查詢,即使您未在此處使用select關鍵字,hibernate也會將其添加為生成的SQL的一部分。
您需要做的事來避免例外是說
q.list();
現在,這將返回一個列表( 這里是文檔)。 如果您要獲取元素的大小,可以說
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類似的結構(對象和屬性除外)。
希望這可以幫助。
我今天也碰巧犯了同樣的錯誤。
您的SQL語句不正確。
你可以試試:
DELETE from Subscribers WHERE slave = :slave AND source
嘗試這個:
int result = q.list().size();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.