ここで「スコープ」という用語が正しいかどうかはわかりません。
JPAトランザクション管理にSpringを使用しています(下にHibernateがあります)。データベーストランザクションを実行するための私のメソッドはプライベートですが、 @Transactional はクラスまたはパブリックメソッドでのみ設定できるため
このメカニズムはプロキシに基づいているため、プロキシを介して着信する「外部」メソッド呼び出しのみが傍受されます。これは、「自己呼び出し」、つまり、ターゲット オブジェクト内のメソッドがターゲット オブジェクトの他のメソッドを呼び出す場合、呼び出されたメソッドが @Transactional でマークされていても、実行時に実際のトランザクションにつながらないことを意味します。
クラスのパブリック エントリ ポイントを @Transactional に設定しました。
@Transactional
public void run(parameters) {
//First non-database method, takes a decent amount of time
Data data = getData();
//Call to database
storeData(data);
}
private storeData(data) {
em.persist(data);
}
これは悪い習慣ですか?Spring は、ここで必要とされるよりも長くオープン トランザクションを保持しますか? storeData() メソッドを DAO クラスに移動して公開しようと考えていたのですが、学問的なポイントとして、公開にリファクタリングするとパフォーマンスが向上するかどうかを知りたいと思いました。