문제

MySQL 데이터베이스에서 DI와 Hibernate 용 Spring을 사용하고 있습니다.테이블에 레코드를 삽입 한 다음 테이블을 쿼리하고 일부 집계 계산을 수행하는 뷰를 실행하는 트랜잭션 안에 코드가 있습니다.내가 보는 문제는 동일한 트랜잭션 동안 방금 삽입 된 레코드가 뷰의 계산 된 값에 포함되어 있지 않다는 것입니다.MySQL Workbench에서 동일한보기를 실행하고 삽입 된 값이보기에 포함됩니다.누구 든지이 일을 원한지 알고 있습니까?

도움이 되었습니까?

해결책

궁극적으로, EntityManager.refresh (Object Entity)를 호출하여 업데이트 된 뷰 레코드의 엔티티를 새로 고치면됩니다.문제는 Hibernate가 업데이트 된 원래 엔티티에 종속 (데이터베이스 수준에서)을 알지 못해보기가 뷰를 업데이트해야한다는 사실을 인식 할 수 없다고 생각합니다.나는 Hibernate가보기에서 레코드를 캐싱하고 플러시 () 후에도 갱신해야한다는 것을 알지 못합니다.

Hibernate는 원래 테이블과 뷰를 완전히 무관 한 것으로 보이고 현실이 테이블에 의존하고 테이블이 변경 될 때마다 "더티"를 만들어야합니다.나는 그것을 인식하기 위해 최대 절전 모드를 얻는 방법을 모른다.

다른 팁

아직 데이터베이스에 대한 변경 사항을 플러시하지 않았을 것입니다.Hibernate는 나중에 읽는 행을 삽입하고 뷰를 삽입 한 테이블 사이에 연결이 있음을 알지 못합니다.뷰를 쿼리하기 전에 EntityManager (또는 세션 또는 템플릿)를 세척하십시오.

이것은 REPEATABLE READ 인 MySQL의 기본 분리 수준으로 인해 발생합니다.

이것은 MySQL Workbench의 트랜잭션이 트랜잭션까지 변경되지 않습니다.선택을 트랜잭션으로 실행합니다.

커밋 (또는 롤백)을 발행하면 MySQL Workbench의 변경 사항이 표시되어야합니다.

설치의 기본 분리 수준을 READ COMMITTED에 변경하거나 MySQL Workbench에서 세션의 격리 수준을 READ COMMITTED

로 변경하려는 경우가 아마

어떻게하는 방법에 대한 세부 사항을 설명합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top