2017-12-11 5 views
1

나는 Hibernate와 Oracle을 사용하고있다. 개체를 저장하고 시퀀스를 사용하는 트리거에 의해 생성 된 ID를 가져 오려고합니다. (트리거 사용이 필요합니다.) 현재 처분 할 수있는 ID를 얻는 방법에는 두 가지가 있습니다. 1) ID 열의 최대 값을 찾습니다. 2) 시퀀스의 현재 값을 찾습니다. 두 가지 방법 모두 동일한 문제를 겪습니다. 즉,이 개체를 저장하고 ID를 가져 오는 사이에 다른 삽입이 발생할 수 있습니다. 어떻게 만듭니딜 삽입을 피할 수 있습니까?Hibernate 객체를 저장 한 후 올바른 ID를 얻는 방법?

또한이 두 이벤트는 ID를받은 후에 끝나지 않는 트랜잭션에서 발생합니다. 다른 말로는 나중에 일어날 일들이있을 것입니다. 따라서 테이블을 잠그면 트랜잭션이 끝날 때까지 잠금이 해제되지 않습니다. 이것은 허용되지 않습니다. 당신은 당신을 위해 선행 ID의 특정 수를 할당 할 allocationSize을 지정하고 사용할 수 있습니다

1) :

답변

0

당신이 엔티티 시퀀스 ID generation strategy를 사용하는 경우, 당신은이 문제를 극복한다 특정 거래 내에서 귀하를 위해 당신이 session.save(entity) 또는 entityManager.persist(entity)를 호출하면

2)는, ID는 트랜잭션 방법의 끝과 실제 flushcommit까지 기다릴 필요없이 바로 호출 한 후 사용할 수 있습니다.

관련 문제