Springの@Transactional(readOnly=true)で読み取り専用のトランザクションにする
org.springframework.transaction.annotation.Transactionalアノテーションでトランザクション管理ができますが、readOnly=trueとすると登録更新が出来ないトランザクションになります。省略時のデフォルトはreadOnly=falseです。
userテーブルにデータが2件入っています。
readOnly=trueにして、サービスクラスでパスワードを変更してみます。
package jp.co.confrage.service; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import jp.co.confrage.entity.UserEntity; import jp.co.confrage.repository.UserRepository; import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor public class UserService { private final UserRepository repository; /** * 読み取り専用メソッド */ @Transactional(readOnly = true) public void update() { UserEntity entity = repository.findById(1L).orElse(null); entity.setPassword("123"); repository.save(entity); // 更新されず、例外も発生しない } }
上記のupdateメソッドは更新をしていますが、saveメソッドで実際は更新されずに例外も発生しません。
readOnly=false、もしくは省略すれば正しく更新されます。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
資格:少額短期保険募集人,FP3級,宅建士
コメント