私は、Springでのトランザクションの伝播がHibernateと実際は混乱しています。私はSpringの@Transactional
アノテーションを私のサービスレイヤメソッドで使用しています。いくつかは「読み取り専用=真」とマークされています。私の読み取り専用サービスメソッドの1つが読み取り専用ではないメソッドを呼び出す場合、どうすれば対処できますか?Open Session In Viewを使用すると、トランザクションの伝播はどのように機能しますか?
REQUIRES_NEW
の伝播をサポートするために私のすべての読み書き方法をマークすることができますが、これは望ましくないかもしれないという振る舞いをもたらします。つまり、読み取り専用メソッドが読み書き方法と呼ばれています。 read-writeメソッドが別のread-writeメソッドを呼び出すと、新しいトランザクションは必要ありません。
これをすべて考慮して、Open Session In View(OSIV)の仕組みがわかりません!確かに、SpringでOSIVを使用すると、OpenSessionInViewFilter
は、サービスメソッドが呼び出される前にトランザクションを開始する必要があります。その場合、トランザクションが読み取り専用か読み取り書き込みかを定義する必要があります。しかし、どうやってこれを知ることができますか?サービス層のカバーの下で何が起こるかはわかりません。
私はこのすべてのことで完全に暗いですし、誰かにそれを私に説明するのが大好きです!