강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của cothe
cothe

câu hỏi đã được viết

Lập trình JPA tiêu chuẩn Java ORM - Cơ bản

다른 트랜잭션에 JPA 트랜잭션 참여

Đã giải quyết

Viết

·

705

1

안녕하세요? 영한님 덕분에 JPA를 더 쉽게 이해하게 되었습니다. 감사합니다.

 

Spring의 PlatformTransactionManager 를 이용해서 직접 가져온 트랜잭션이 있을 때

이 트랜잭션안에서 JPA 를 쓰고 싶은데 가능할까요?

 

 

 

JPAjava

Câu trả lời 2

1

cothe님의 프로필 이미지
cothe
Người đặt câu hỏi

답변 덕분에 잘 구현했습니다.

 

감사합니다 :)

0

yh님의 프로필 이미지
yh
Người chia sẻ kiến thức

안녕하세요. jungjin1님

 

JPA를 사용하려면 DataSourceTransactionManager 대신에 JpaTransactionManager를 스프링 빈으로 등록해야 합니다.

참고로 스프링 부트를 사용하면서 Spring Data JPA가 설정되어 있으면 JpaTransactionManager가 기본으로 등록됩니다.

 

//빈 등록

@Bean

JpaTransactionManager transactionManager() {

    return new JpaTransactionManager();

}

 

 

스프링을 활용한 선언적 트랜잭션 관리는 다음과 같이 작성하시면 됩니다.

 

@Repository

public class MemberRepository {

 

    @PersistenceContext

    private EntityManager em;

 

    @Transactional

    public void save(Member member) {

        em.persist(member);

    }

 

}

 

 

스프링을 활용한 프로그래밍 방식의 트랜잭션 관리는 다음과 같이 작성하시면 됩니다.

 

@Service

public class TxTemplateService {

 

    @Autowired

    private JpaTransactionManager txManager;

 

    public void go(Member member) {

        EntityManagerFactory emf = txManager.getEntityManagerFactory();

        TransactionTemplate template = new TransactionTemplate(txManager);

        template.execute(status -> {

            EntityManager em = EntityManagerFactoryUtils.getTransactionalEntityManager(emf);

            em.persist(member);

            return member;

        });

    }

}

참고로 JpaTransactionManager로도 데이터베이스 커넥션을 직접 사용할 수 있습니다. 예를들어서 JdbcTeamplate나, MyBatis와 함께 사용할 수 있습니다.

감사합니다^^

Hình ảnh hồ sơ của cothe
cothe

câu hỏi đã được viết

Đặt câu hỏi