を現在永続状態のオブジェクトに呼び出すときは、javax.persistence.EntityNotFoundException
を避けるより洗練された方法がありますか?私はオブジェクトを削除するために2つのクエリを作成する必要がある状況を回避しようとしています。現時点で私は不正行為をしています:Hibernate EntityManagerは例外なくエレガントに削除しますか?
void remove(String id) {
T model = entityManager.getReference(type, id);
entityManager.remove(model);
}
ただし、モデルが存在しない場合は例外が発生します。
void remove(String id) {
T model = retrieve(id);
if(model != null)
entityManager.remove(model);
}
しかし、それは(今のところはさておきキャッシュの概念を設定)2つのクエリを伴うだろう:
私ができる。
私は例外をキャッチするために投票します。人々が言うことにもかかわらず、太陽がJavaメインAPI自体をプログラムしたやり方では、何度も通常の実行中のtry-catchは絶対にうまくいきます。先日、 'ClassLoader.loadClass()'の294行目を見て、* very * coreクラスの予想される例外を試してみました。 –
MySQLデータベースの追加クエリと同じように高速/高速の例外が発生する可能性が高いとします。 – Finbarr
オブジェクト参照が便利な場合は、entityManager.contains(obj)を呼び出すだけです。falseを返した場合は、既に削除しています。 (これはIDを持っていなければ動作しませんし、別の永続コンテキストで削除した可能性もあります。その場合は、JPQLのdelete文が機能します。 – JesperSM