2016-07-07 6 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はそれが正しい構文だと思うのはなぜですか?Hibernate、JOINSを持つネイティブ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 JOINを含む文を実行しないため、解決策はサブクエリを使用することでした。

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はSTANDARDクエリを処理できるはずです。サブクエリを使用するように変更しました。 –

関連する問題