최대 절전 모드:JPA를 통해 MariaDB 커밋하기
저는 편안한 인터페이스를 제공해야 하는 작은 어플리케이션을 작성하려고 합니다.이것은 그 자체로 현재의 동면 버전과 비교적 잘 작동합니다.
테스트를 시도할 때 다음과 같이 수정하기 위한 서버측 코드:
EntityManager manager = // [...]
manager.getTransaction.begin();
AEntity entity1 = manager.find(AEntity.class, 4711);
entity1.setSomething("whatever");
manager.merge(entity1);
manager.getTransaction.commit();
manager.close();
일반적으로 이것은 작동할 것입니다.하지만 Junit로 테스트를 할 때는 그렇지 않습니다.
EntityManager manager = // [...]
// insert some test data
Response r1 = target(url).request().put(someAEntityChangeInfo);
assertEquals(200, r1.getStatus());
manager.refresh(mAEntity);
assertEquals("whatever", mAEntity.getSomething()); // was set and commited on server-side
마지막 주장은 다음과 같이 말하는 데 실패합니다.mAEntity
(업데이트해야 함)에는 이전 데이터가 포함되어 있습니다.한 번(단 한 번만) 주장이 괜찮았기 때문에 이 행동이 인종 조건일지도 잘 모르겠습니다.
주장하기 전에 데이터가 실제로 커밋되었는지 확인하는 방법은 무엇입니까?
MariaDB, MariaDB Connector/J, Hibernate 5.0.7 및 Jersey 2.22.1을 사용합니다.
문제는 플러시 트랜잭션과 연결 분리가 혼재된 것으로 보입니다.
이 문제를 해결하려면:
- 플러시 모드를 커밋하도록 설정합니다.
manager.setFlushMode(FlushModeType.COMMIT);
- 테스트를 위해 연결 분리를 다음으로 설정합니다.
READ_COMMITED
테스트 연결이 다른 Entity Manager와의 테스트 코드에 의해 변경된 내용을 확인할 수 있도록 합니다.생산을 위해서는 더 높은 고립감이 필요합니다.JPA 속성:<property name="hibernate.connection.isolation" value="2" />
동면기도 있습니다.autocommit
소유물.설정 위치false
행동에 대한 통제력을 높이기 위해서입니다.
언급URL : https://stackoverflow.com/questions/35275666/hibernate-commiting-mariadb-via-jpa
'programing' 카테고리의 다른 글
도커-허브를 사용하지 않고 도커-이미지를 공유하는 방법? (0) | 2023.09.12 |
---|---|
다른 것이 가장 많이 이루어질 때 if-ellif-ellif-ellif-ellip 진술을 하는 가장 효율적인 방법은? (0) | 2023.09.12 |
폴더를 통한 파워셸 루프, 각 폴더에 파일 생성 (0) | 2023.09.12 |
java.sql.SQL 예외:Io 예외:파이프가 부러져서 재가동하지 않고 복구하는 방법? (0) | 2023.09.12 |
양식 없이 코드이그니터 CSRF 토큰을 얻는 중? (0) | 2023.09.12 |