2012-07-25 1 views
0

실제로 저장 프로 시저를 호출하고 동일한 트랜잭션에서 데이터베이스를 변경하는 중 문제가 있습니다. 내가 뭘하는지 EJB를 3.0 (EJB를)에서 오라클 데이터베이스에 사용하여 일부 데이터를 삽입하고 원시 데이터를 사용하여 일부 처리를 만들기 위해 기본 jpa 쿼리를 사용하여 저장 프로 시저를 호출하는 것입니다. 하지만 문제는 PL/SQL 함수가 트랜잭션을 커밋하고 모든 트랜잭션을 동일하게 유지하기 때문에 내가 원하지 않는 호출을하지 않으면 변경 사항을 볼 수 없다는 것입니다. 그래서 질문은 : 거기에 내 데이터를 삽입하는 방법은 무엇입니까 pl/SQL 함수를 호출하고 모든 후 커밋 (또는 결국 모든 변경 롤백)? jpql sql with same transaction

답변

0

당신의 도움이 저장 프로 시저를 실행하기 전에 entityManager.flush()를 호출해야합니다 주셔서 감사합니다. 그렇지 않으면, 퍼시스턴스 컨텍스트는 여전히 메모리에서 변경 사항을 보류하고있을 수 있습니다. 플러싱은 보류중인 모든 변경 사항이 데이터베이스에 기록되도록합니다.

작동하지 않으면 저장된 proc이 JPA에서 사용하는 것과 다른 트랜잭션을 사용함을 의미합니다.

+0

예! 플러시로 문제가 해결됩니다! DB에 실제로 데이터를 쓰지는 않지만 현재 트랜잭션을 공유하는 다른 프로세스에서 볼 수있게합니다. 따라서 필자의 절차는 아직 작성되지 않은 경우에도 다른 데이터를 볼 수 있습니다. 감사합니다 –

+0

그것은 DB에 글을 남깁니다. 트랜잭션을 커밋하지 않습니다. –