jpa 2.1에서 api StoredProcedureQuery는 JDBC CallableStatement를 호출하도록 표시되었습니다. 문제는 내가 오라클 프로 시저를 호출 할 때 일부 삽입 작업을 수행하는 것이고 비 트랜잭션 방식에서는 변경을 커밋하지 않고 충격을 줄 때 변경이 커밋 된 것처럼 보입니다. 무엇이 문제입니까?jpa2.1 StoredProcedureQuery 트랜잭션 계획
답변
JDBC는 간단합니다. 연결은 autoCommit이 기본적으로 활성화되어 만들어지며 즉시 실행하는 모든 명령문을 커밋합니다. 수동으로 해제 할 수 있으며 트랜잭션을 커밋하거나 수동으로 롤백 할 수 있습니다. 이는 JPA (EntityManager 트랜잭션 처리 메커니즘에 의해 처리됨) 및 응용 프로그램 컨테이너까지 확장됩니다.
변경 사항을 커밋하지 않으려면 트랜잭션을 커밋하지 마십시오. 미들웨어 또는 JPA를 처리하는 일부 트랜잭션을 사용하고 있다면 그것을 수행하지 않는지 확인하십시오. 그것은 간단합니다.
비 트랜잭션 방식으로 인해 autoCommit 연결이 초기화되거나 실제로 비 트랜잭션 적이 아니지만 미들웨어 및 jpa 공급자 구현에 따라 다릅니다.
당신 말이 맞아요. 그것은 그것과 같이 단순한 것으로되어 있습니다. 하지만 내가 말했듯이, 내 메소드는 트랜잭션이 아니며 jpa의 autoCommit 속성은 false로 설정되어 트랜잭션을 커밋합니다. –
사용중인 트랜잭션 의미를 제공하는 미들웨어는 무엇입니까? 나는 그 문제에 대해 먼저 살펴볼 것이다. – miljanm
트랜잭션 외부에서 쿼리를 호출하면 JPA 공급자가 수행 할 것으로 예상되는 작업은 무엇입니까? 그것은 영매가 아닙니다. 제어하려는 경우 txn에 넣으십시오. –
아무 것도하지 않기를 원합니다. 그러나 나는 무엇이 tx를 커밋하고 있는지 이해할 수 없다. –
만약 트랜잭션 밖에서 "그것"을한다면 "자동 커밋"(그 상황에서 의미가있는 유일한 것)입니다. 나는 그것이 "충격적"인 것을 보지 못한다. 트랜잭션을 넣고 롤백하십시오. –