1. No Persistence provider for EntityManager named Hi
부트를 사용하지 않을 때는 META-INF 내부의 persistence.xml 파일의 unit-name과 persistenceUnitName을 서로 매칭 시켜주면 되지만 부트는 persistence.xml 파일 자체가 없습니다.(자동으로 설정)
스프링 부트 없이 다음과 같은 접근으로 EntityManagerFactory를 직접 사용하려고 하면
"Exception in thread "main" jakarta.persistence.PersistenceException: No Persistence provider for EntityManager named Hi" 와 같은 에러가 발생합니다
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Hi");
EntityManager em = emf.createEntityManager();
EntityTransaction entityTransaction = em.getTransaction();
2. SpringBoot 트랜잭션 직접 다루기
아래와 같이 코드를 작성하면 에러가 발생합니다. @Transactional을 사용하라는 뜻인데 이를
"java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead"
@Autowired
private EntityManager em;
@GetMapping("/")
public String success(){
EntityTransaction transaction = em.getTransaction();
transaction.begin();
======================= 메인로직 ======================
transaction.commit();
return "success";
}
제가 원한 것은 트랜잭션을 직접 이용하는 것이어서 해결책을 찾던 도중 다음과 같은 방법으로 해결했습니다
@PersistenceUnit
private EntityManagerFactory emf;
@GetMapping("/")
public String success(){
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
======================== 메인 로직 ============================
transaction.commit();
return "success";
}
'Spring' 카테고리의 다른 글
@AllArgsConstructor 사용 지양에 따른 리팩토링 (1) | 2023.04.19 |
---|---|
테스트 단 @Transactinal 롤백 (5) | 2023.03.30 |
SpringBoot3.0 Entity생성오류 (0) | 2023.03.30 |
jwt인증 403(forbidden)에러 (1) | 2023.03.08 |
HttpSecurity와 WebSecurity차이 (0) | 2023.02.27 |
1. No Persistence provider for EntityManager named Hi
부트를 사용하지 않을 때는 META-INF 내부의 persistence.xml 파일의 unit-name과 persistenceUnitName을 서로 매칭 시켜주면 되지만 부트는 persistence.xml 파일 자체가 없습니다.(자동으로 설정)
스프링 부트 없이 다음과 같은 접근으로 EntityManagerFactory를 직접 사용하려고 하면
"Exception in thread "main" jakarta.persistence.PersistenceException: No Persistence provider for EntityManager named Hi" 와 같은 에러가 발생합니다
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Hi");
EntityManager em = emf.createEntityManager();
EntityTransaction entityTransaction = em.getTransaction();
2. SpringBoot 트랜잭션 직접 다루기
아래와 같이 코드를 작성하면 에러가 발생합니다. @Transactional을 사용하라는 뜻인데 이를
"java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead"
@Autowired
private EntityManager em;
@GetMapping("/")
public String success(){
EntityTransaction transaction = em.getTransaction();
transaction.begin();
======================= 메인로직 ======================
transaction.commit();
return "success";
}
제가 원한 것은 트랜잭션을 직접 이용하는 것이어서 해결책을 찾던 도중 다음과 같은 방법으로 해결했습니다
@PersistenceUnit
private EntityManagerFactory emf;
@GetMapping("/")
public String success(){
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
======================== 메인 로직 ============================
transaction.commit();
return "success";
}
'Spring' 카테고리의 다른 글
@AllArgsConstructor 사용 지양에 따른 리팩토링 (1) | 2023.04.19 |
---|---|
테스트 단 @Transactinal 롤백 (5) | 2023.03.30 |
SpringBoot3.0 Entity생성오류 (0) | 2023.03.30 |
jwt인증 403(forbidden)에러 (1) | 2023.03.08 |
HttpSecurity와 WebSecurity차이 (0) | 2023.02.27 |