[TroubleShooting (springboot)] No EntityManager with actual transaction available for current thread..


SpringBootで発生したエラーです.エラーが発生した会員情報ライブラリのコードは以下の通りです.
@RunWith(SpringRunner.class) // junit에게 스프링관련테스트할것을 알림
@SpringBootTest
class MemberRepositoryTest {
    @Autowired MemberRepository memberRepository;

    @Test
    public void save() {
        // given
        Member member = new Member();
        member.setUsername("member1");

        // when
        Long savedId = memberRepository.save(member);
        Member findMember = memberRepository.findById(savedId);

        // then
        Assertions.assertThat(savedId).isEqualTo(findMember.getId());
        Assertions.assertThat(member.getUsername()).isEqualTo(findMember.getUsername());

    }
}

エラーの確認


No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call

No EntityManager with actual transaction available for current thread
直訳の場合、エンティティマネージャは現在のスレッドで使用可能な実際のトランザクションを持っていません.
Springはあまり勉強しないので『どういう意味ですか?』と思います.

長呼吸で理解する


用語

  • EntityManagerはエンティティ管理クラスであり、マネージャ内に永続性コンテキストが管理されます.
  • 영속성 컨텍스트は、永続的なストレージエンティティの環境です.
  • 트랜잭션:データ変更はトランザクションで行う必要があるワークユニットです.
  • flush:永続性コンテキストの変更をdbに反映し、トランザクションが発生するとflushは操作を実行します.
  • 理解の順序


  • したがって、エンティティーマネージャは持続性コンテキストをどのように管理しますか?
    トランザクションが正常に実行されると、コミットされ、実際のDBおよびエンティティーマネージャに反映されます.

  • JPAのすべてのロジックは、トランザクションで実行する必要があります.これはなぜですか.
    これは、トランザクション・ユニットに基づいて、プライマリ・キャッシュ領域のオブジェクトがデータベースにリフレッシュされて永続化されるためです.

  • だからこの間違いの原因は?
    これは、オブジェクトがこのような永続化操作を行うpersist()メソッドに入ったため、エラーですが、トランザクションは存在しません.
  • の原因となる


    EntityManagerによるすべてのデータ変更は、トランザクションで行う必要があり、@Transactionalはテストメソッドで宣言されていません.

    解決する


    @Transactional.
    @Test
    @Transactional
    public void save() {
    ...}

    リファレンス

  • https://perfectacle.github.io/2018/01/14/jpa-entity-manager-factory/
  • https://sas-study.tistory.com/348