InvalidDataAccessApiusageException 과 Write operations are not allowed in read - only mode 해결 방법

8314 단어 jsonWebCXFservice
요 며칠 동안 웹 서 비 스 를 써 서 인 터 페 이 스 를 계속 측정 하고 있 습 니 다. get 방법 도 문제 가 없 었 습 니 다. 어젯밤 부터 save 방법 을 측정 할 때 이 오류 가 발생 했 습 니 다.
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 안에 있 는 것 이 냐, 아니면 근본 을 치료 하 는 것 이 냐!!
이번에 기억력 이 좋아졌어!

좋은 웹페이지 즐겨찾기