엔티티 관리자.setFlushMode() vs Query.setFlushMode()
일부 설명서 참조:
javax.persistence를 열거합니다.플러시 모드 유형
- AUTO: (기본값) 쿼리 실행 시 플러시합니다.
- 커밋: 트랜잭션 커밋 시 플러시가 발생합니다.
자백스 독립엔티티 관리자.플래시 모드 설정(플래시 모드 유형 플래시 모드)
- 지속성 컨텍스트에 포함된 모든 개체에 적용되는 플러시 모드를 설정합니다.
자백스 독립Query.setFlushMode(FlushModeTypeflushMode)
- 쿼리 실행에 사용할 플러시 모드 유형을 설정합니다.플러시 모드 유형은 엔티티 관리자에 사용 중인 플러시 모드 유형에 관계없이 쿼리에 적용됩니다.
샘플 코드:
PTEmp e = em.find(PTEmp.class, 7852L);
e.setName("AAA");
String updateSqlString = "UPDATE PTEmp SET name = :name WHERE id = :id";
TypedQuery<PTEmp> query = em.createQuery(updateSqlString, PTEmp.class);
query.setParameter("name", "BBB");
query.setParameter("id", 7852L);
query.setFlushMode(FlushModeType.AUTO); // <= in 2nd test-case
// this line is commented
em.setFlushMode(FlushModeType.COMMIT);
System.out.println("query FMT: " + query.getFlushMode()); // Always print: AUTO
System.out.println("em FMT: " + em.getFlushMode()); // Always print: COMMIT
em.getTransaction().begin();
query.executeUpdate();
em.getTransaction().commit();
테스트 사례: entityManager 및 쿼리에 대한 FlushModeTypes의 서로 다른 조합.SQL 로그도 표시합니다.
테스트 사례: AUTO FlushModeType(query.setFlushModeType)을 사용하여 명시적으로 쿼리합니다.자동); 주석 없음):
1594 Query UPDATE PTEMP SET fullname = 'AAA' WHERE (ID = 7852) 1594 Query UPDATE PTEMP SET fullname = 'BBB' WHERE (ID = 7852) 1594 Query COMMIT
테스트 사례: AUTO FlushModeType(query.setFlushModeType(FlushModeType)을 사용한 암시적(기본값) 쿼리.자동); 주석 있음):
1616 Query UPDATE PTEMP SET fullname = 'BBB' WHERE (ID = 7852) 1616 Query UPDATE PTEMP SET fullname = 'AAA' WHERE (ID = 7852) 1616 Query COMMIT
두 테스트 사례 모두에서 System.out.println()은 다음을 반환합니다.
- 쿼리flushModeType: AUTO
- emflushModeType: COMMIT
내 의심은:
두 테스트 사례 모두 flushModeTypes가 동일한데 왜 이 두 테스트 사례가 서로 다른 순서로 쿼리를 실행하는지 이해할 수 없습니다.그 결과, 마지막으로 첫 번째 테스트 사례는 'BBB'이고 두 번째 테스트 사례는 'AAA'를 유지합니다.
쿼리에 flushModeType=이 있기 때문에 두 테스트 사례 모두 동일한 순서로 SQL 쿼리를 실행해야 하며 올바른 순서는 첫 번째 테스트 사례(이전: 'AAA', 이후: 'BBB')와 같아야 합니다.AUTO 쿼리를 실행하기 전에 지속성 컨텍스트를 DB로 플러시해야 합니다.
내 지속성 제공자:이클립스 링크.
DB: mariadb.
언급URL : https://stackoverflow.com/questions/50257768/entitymanager-setflushmode-vs-query-setflushmode
'IT' 카테고리의 다른 글
phonegap/httpova를 사용하는 동안 '노드'가 내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않습니다. (0) | 2023.08.31 |
---|---|
투표 경쟁에서 부정행위자를 사냥하는 것 (0) | 2023.08.31 |
이 스팬을 디브의 오른쪽에 맞추는 방법은 무엇입니까? (0) | 2023.08.31 |
설치된 웹 팩 버전 확인 방법 (0) | 2023.08.31 |
Swift - 장치의 WIFI IP 주소 가져오기 (0) | 2023.08.31 |