programing

최대 절전 모드:JPA를 통해 MariaDB 커밋하기

newsource 2023. 9. 12. 20:03

최대 절전 모드: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