InvalidDataAccessApiusageException 과 Write operations are not allowed in read - only mode 해결 방법
Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushM
뒤 져 보 니 이런 말 이 있 었 다.
원인 1: 이 이상 이 발생 한 주요 원인 은 DAO 가 Spring 용기 의 트 랜 잭 션 관리 정책 을 사 용 했 기 때 문 입 니 다. 작업 방법의 이름과 트 랜 잭 션 정책 에서 지정 한 관리 되 는 이름 이 일치 하지 않 으 면 spring 은 기본 트 랜 잭 션 관리 정책 (PROPAGATION REQUIRED, read only) 을 사용 합 니 다. 작업 을 삽입 하고 수정 하면 허용 되 지 않 기 때문에 이 이상 을 패키지 합 니 다.
이유 2: 인터넷 에서 검색 해 보 니 대부분의 글 은 오픈 세 션 인 뷰 필터 와 오픈 세 션 인 뷰 인 터 셉 터 를 언급 하 는 것 으로 대부분 구름 과 안개 가 자욱 하고 무슨 말 인지 몰 랐 다.(인터넷 상에 서 오픈 세 션 인 뷰 필 터 를 언급 했다. 배 정 된 세 션 이 부족 한 것 은 플 러 쉬 모드. 네 이 버 의 것 이기 때문에 프로그램 에서 자신 이 원 하 는 모드 를 수정 해 야 한다. 이 글 을 수록 한 것 은 이전 글 과 관련 이 있 기 때문이다.)
사실 이 이상 한 힌트 는 명확 합 니 다. 읽 기 전용 모드 에서 (Flushmode. NEVER / MANUAL) 쓰기 동작 이 허용 되 지 않 습 니 다. 세 션 을 Flushmode. COMMIT / AUTO 로 바 꾸 거나 트 랜 잭 션 정의 의 readOnly 표 시 를 삭제 합 니 다.
그런데 제 프로필 (web. xml) 에 이게 있어 요.
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
천진 하 다, 전의 부 호 를 추가 하여 형식 오 류 를 제시 하기 시작 합 니 다!!나 멘 붕 왔 어.
Missing value. at character of
6 시간 넘 게 어떻게 된 건 지 모 르 고 잠 을 자 러 갔 어 요.
아침 10 시 에 일어나 서 계속 할 까요, 안 될 까요? 낙심 하여 delete 를 측정 해 보 세 요. 잘못된 힌트 는 다음 과 같 습 니 다.
No message body writer has been found for response class InvalidDataAccessApiUsageException.
나 는
InvalidDataAccessApiUsageException
이 이상 이 어떻게 된 일 인지 알 아 보 았 는데, 사무 관리 문제 인지, 나 로 하여 금 이 bug 가 바로 이 잘못 이라는 것 을 확인 하 게 하기 시작 했다.좋 습 니 다. 다음은 또 하나의 방법 에 아래 를 더 해 보 았 습 니 다. 실 패 했 습 니 다.
@Transactional(readOnly = false)
spring 프로필 에 다음 코드 를 추가 하 는 데 실 패 했 습 니 다.
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="merge*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="put*" propagation="REQUIRED" />
<tx:method name="use*" propagation="REQUIRED" />
<tx:method name="recordOperLog" propagation="REQUIRED" />
<!--hibernate4 getCurrentSession() -->
<tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="count*" propagation="REQUIRED" read-only="true" />
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="list*" propagation="REQUIRED" read-only="true" />
</tx:attributes>
</tx:advice>
아아 아, 마지막 으로 베이스 다 오 에 '호호, 됐어!
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW )
정리 해 보 니 내 가 단독 적 인 방법 으로 써 도 내 가 조정 한 아버지 방법 은 BaseDao 안에 있 는 것 이 냐, 아니면 근본 을 치료 하 는 것 이 냐!!
이번에 기억력 이 좋아졌어!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콘텐츠 SaaS | JSON 스키마 양식 빌더Bloomreach Content를 위한 JSON Form Builder 맞춤형 통합을 개발합니다. 최근 Bloomreach Content SaaS는 내장 앱 프레임워크를 사용하여 혁신적인 콘텐츠 유형 필드를 구축할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.