JPA를 사용중에 이런 에러를 마주할 수 있다.
persistence.xml에서 <property name="hibernate.hbm2ddl.auto" value="update"/> 가 문제라고 추정해서
value를 create로 바꿔보기도 했는데 역시나 소용없었다.
잘 보면 JPAClient라는 내 39번째 코드에 commit()을 사용한 코드가 있는데,
그 코드가 문제가 발생한거다.
근데 왜 문제가 발생했냐면 Transaction not active.... 라고 한다. 왜 트랜잭션이 시작이 안됬다고 할까?
나는 분명 위에서 tx.begin()이라는 코드를 통해서 실행을 시켰는데?
곰곰히 생각해보았다. 무엇이 문제가 될 수 있는지.
코드 상에서
tx.begin()을 한번 했고
이후에
tx.commit()
tx.commit()
즉 두번을 해줬다.
이게 문제가 될 수 있을까?
그래서 tx.commit()두개의 구문 사이에서 tx.begin()을 해주었다.
그랬더니 아주 잘 출력이 되었다.
이를통해 알게 된건 commit을 하기 위해서는 반드시 앞에 begin이 와야한다는거다. 알고 있었지만 그냥 먼저 선언된게 아니라 쌍으로 묶여서 개수를 맞춰줘야 한다는거다. commit을 위해서 한번 했으면 그 다음 코드에서는 반드시 또 begin을 해줘야만 commit을 할 수 있게 되는거다. 어느 코드에서는 begin중복없이 그냥 계속 commit하라고 되어있던데 내가 잘못본거거나 그 분 코드가 틀렸거나 내 기억이 온전치 못하거나 셋 중 하나다.