• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SpringのHibernate連携での条件指定delete)

SpringのHibernate連携で条件指定delete方法

このQ&Aのポイント
  • SpringのHibernate連携で条件指定delete方法についてまとめました。
  • HibernateTemplateを使用して条件付deleteやupdateはできません。
  • 条件付deleteを実現する方法についても説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nobutame
  • ベストアンサー率16% (3/18)
回答No.1

まったく自信ないですが、こんな感じで出来ないでしょうか? getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { int deletedEntities = session.createQuery("delete A where A.id>10").executeUpdate(); return null; } });

noname#60875
質問者

お礼

ありがとうございます。 お教えいただいた方法を、明日試させていただきます。 追って結果をご報告させていただきます。

noname#60875
質問者

補足

お教えいただいたとおり、以下のメソッドで実現できました。 本当にありがとうございます。 が、そもそもこのようなメソッドはhibernate的(Spring的?)ではなかったりするのでしょうか。 通常こういった要件(条件指定で一括削除)の場合はどうするのがよいのでしょうか。 たとえば、findで削除対象を検索した後、getHibernateTemplate().delete(Object);を繰り返すとか、deleteAll(Collection)で削除するほうがようのでしょうか。   public int deleteAttendances(final String uid, final String dateYm) {     Object ret = getHibernateTemplate().execute(new HibernateCallback() {       public Object doInHibernate(Session session)           throws HibernateException {         Query query = session.createQuery(             "delete Attendance a where a.comp_id.uid = ? and a.comp_id.dateYm = ?");         query.setString(0, uid);         query.setString(1, dateYm);         int deletedEntities = query.executeUpdate();         return new Integer(deletedEntities);       }     });     return ((Integer) ret).intValue();   }