2016-07-07 37 views
0
public void do_UPDATE(Set<Long> customerIdSet) { 

    final String query = 
     "UPDATE product_orders po " + 
     "INNER join customer c " + 
     "ON po.order_id = c.order_id " + 
     "SET po.updated_on = now() " + 
     "WHERE c.customer_id IN (:customerIdSet)"; 

     List<Long> ids = new ArrayList<Long>(customerIdSet.size()); 

     for(final Long id : customerIdSet) { 
      ids.add(id); 
     } 

    _sessionFactory 
     .getCurrentSession() 
     .createSQLQuery(query) 
     .setParameterList("customerIdSet", ids) 
     .executeUpdate(); 

} 

我收到SQLGrammarException。這個查詢實際上運行在一個真正的MySQL控制檯中,但爲什麼Hibernate認爲它是正確的語法?休眠,無法執行具有連接的本機SQL更新查詢

+0

'.createQuery(查詢)'? http://stackoverflow.com/questions/8636806/difference-between-hibernate-createcriteria-createquery-createsqlquery-functio – Alex

+0

這是一個用於創建HQL查詢。 –

+0

'.setParameter('呢?因爲你的'customerIdSet'不是'List'型 – Alex

回答

0

我的平臺將不會執行與INNER聲明中他們加入,因此該解決方案是使用子查詢。

0

如果問題是與INNER JOIN我會嘗試修改查詢:

"UPDATE product_orders po " + 
"INNER join customer c " + 
"ON po.order_id = c.order_id " + 
"AND c.customer_id IN (:customerIdSet) "+ 
"SET po.updated_on = now() " 
+0

JDBC應該能夠用手標準查詢,我改成了使用子查詢 –