2017-05-02 4 views
3

私は@Transactional(readOnly=true)のサービスレイヤーメソッドを持っていますが、このメソッドではかなりの数のRuntimeExceptionが発生します(例外は、NotFoundException例外です)。Spring @トランザクションの読み取り専用モードのロールバックの振る舞い

私はORM HibernateをDB対話プロセスにも使用しています。

そうすることは法的なパターンですか?

"ロールバック"動作の意味でのこの場合のデフォルトの動作は何ですか?接続の状態に何らかの悪影響を及ぼしたり、問題を引き起こしたりすることはありますか?


「自分自身で試してみませんか?」というようなものではありません。私はこのTransaction rolled back because it has been marked as rollback-onlyへのの可能性があるという疑いがあり、いくつかの例外の後で同じ方法でエラーが発生します。これはでした非常に具体的なJDBC PostgreSQLドライバエラーです。そういうわけで私は一般的にこのデザインについて疑問に思っています:そうすることは合法か違法ですか?

+0

これを見てくださいhttp://256stuff.com/gray/docs/misc/performance_optimizing_spring_hibernate_transactions/ – reos

+0

実行時例外のロールバックとスローに関することはありません – Andremoniy

答えて

0

私が理解する限り、あなたはロールバックを心配しています。この場合、readOnlyselect statementであり、通常はreadからロールバックするものはありません。これが便利な唯一の場所は、あなたがロックの下で読むときと、トランザクションが終了したときにそのロックを解放することです。

AFAIK readOnlyは、flushmodeをFlushMode.NEVERに設定します。これは同時に良好で悪いです。いいえ、汚れたチェックがないので、hereと記載されています。あなたがreadOnlyトランザクション内でトランザクションを読み書きすると、セッションがフラッシュされないため、トランザクションはコミットに失敗します。これは簡単にテストできるbtwです。私はこれを試してから変更されていないことを願っています。

次に接続プールがあります。 C3P0のデフォルトのポリシーはコミットされていない作業をロールバックすることです。これを制御するフラグはautoCommitOnCloseです。

this link約とpostgresがあります。私はこれまでに働いておらず、実際に意見を述べることはできません。

Transaction rolled back because it has been marked as rollback-onlyです。 readOnlyトランザクションの場合、前に述べたようにロールバックするものがない可能性がありますので、は実際にの方法を使用して、@Transactionalメソッドをチェーン化します。

関連する問題