dポイントプレゼントキャンペーン実施中!

お世話になります。

spring-framework-1.2.8
hibernate-3.1
でwebアプリの開発を行っております。

宣言的トランザクション管理でDAO作成するために、
HibernateTemplate(org.springframework.orm.hibernate3.support.HibernateDaoSupport#getHibernateTemplate()で取得しています)
の各種メソッドでDBアクセスしていますが、条件付delete発行の方法がわかりません。
find()にはクエリ文字列を渡して検索するメソッドがあるのですが、delete()やupdate()にはクエリ文字列を受け取るメソッドがないようです。

HibernateTemplateを使用して条件付delete(SQLのdelete form xxx where xx=x の発行)やupdateは出来ないのでしょうか。
また、条件付deleteはどのように実現すればよいのでしょうか。

よろしくお願いします。

A 回答 (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;
}
});

この回答への補足

お教えいただいたとおり、以下のメソッドで実現できました。
本当にありがとうございます。
が、そもそもこのようなメソッドは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();
  }

補足日時:2006/07/17 02:55
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/07/15 02:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!