簡體   English   中英

休眠Java選擇查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM