2011-07-06 11 views
3

私はオブジェクトを持っている -Hibernate - メモリにロードせずに条件を削除するには?

@Entity 
public class myObject{ 
     public string fieldA; 
     public string fieldB 
     ... 
} 

私はそれのいずれかのインスタンスを持っていないが、私は fieldA == Aを持っているデシベルのすべての行を削除したいです。

これは正しい方法ですか?

try { 
     session.beginTransaction(); 
     session.createQuery("delete from MyObject where fieldA = " +   
          "BlaBla").executeUpdate(); 

     session.getTransaction().commit(); 
     savedSuccessfully = true; 
    } catch (HibernateException e) { 
     session.getTransaction().rollback(); 
     savedSuccessfully = false; 

    } finally { 
     session.close(); 
    } 
    return savedSuccessfully; 

答えて

2

HibernateはHSQLと配線豆巻き込まないことを確認するためにnative sql in hibernatesession.createSQLQueryを使用して見てみましょう。

また、文字列の連結を使用してクエリを構築することも避けてください。最後に、あなたのデータベースは、このような単純なクエリであなたのボトルネックによく似ていますので、テーブルに適切なインデックスがあることを確認してください。

0

はい、バッチが最初のデータを照会することなく、削除を行うには、HQLを使用します。

session.createQuery("delete from MyClass where ...").executeUpdate(); 
0

は、なぜあなたはORMを使用して実施することを決定した場合、それを行うのでしょうか? 、

  1. 関連FIELDAとFIELDBでオブジェクトを取得
  2. DELETE HQLを実行するには、オブジェクトに
0

を削除します。ORMの下に何かを削除する

正しい手順では、アプリケーションは次のようになり実装しました

Batch processing

参照Query.executeUpdate()メソッドを使用します3210
関連する問題