[SPRING] 업데이트 방법을 호출하지 않고 트랜잭션 저장
SPRING업데이트 방법을 호출하지 않고 트랜잭션 저장
@Transactional 주석이 달린 메소드가 있습니다. 내 Oracle DB에서 개체를 검색하고 필드를 변경 한 다음 메서드에서 반환합니다. 개체를 저장하는 것을 잊었지만 어쨌든 데이터베이스가 업데이트된다는 것을 발견했습니다.
applicationContext
<tx:annotation-driven />
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
내 방법
@Transactional
public void myMethod(long id) {
MyObject myObj = dao.getMstAttributeById(id);
myObj.setName("new name");
//dao.update(myObj);
}
내 질문은 왜 MyObject가 데이터베이스에 저장되는 것입니까?
해결법
-
==============================
1.왜냐하면 Hibernate는 영속적 인 엔티티들에 대한 변경들을 자동적으로 감지 할 것이고 그에 따라 데이터베이스를 업데이트 할 것이기 때문이다. 이 동작은 최대 절전 모드 참조 설명서의 11 장에 설명되어 있습니다. 관련 부분은 다음과 같습니다.
왜냐하면 Hibernate는 영속적 인 엔티티들에 대한 변경들을 자동적으로 감지 할 것이고 그에 따라 데이터베이스를 업데이트 할 것이기 때문이다. 이 동작은 최대 절전 모드 참조 설명서의 11 장에 설명되어 있습니다. 관련 부분은 다음과 같습니다.
-
==============================
2.JPA를 사용하는 경우 엔티티가 관리되는 상태 (활성 트랜잭션 내에서 DAO로부터 데이터를 가져 오는 방식) 인 경우, 변경된 모든 내용이 JPA에 반영됩니다. 트랜잭션 커밋 중 데이터베이스.
JPA를 사용하는 경우 엔티티가 관리되는 상태 (활성 트랜잭션 내에서 DAO로부터 데이터를 가져 오는 방식) 인 경우, 변경된 모든 내용이 JPA에 반영됩니다. 트랜잭션 커밋 중 데이터베이스.
즉, 트랜잭션 커밋이 데이터베이스에 대한 변경 사항을 플러시하기 때문에 업데이트 작업을 호출하는지 여부는 중요하지 않습니다.
-
==============================
3.데이터베이스 자동 업데이트 방지가 2 단계 프로세스임을 알게되었습니다.
데이터베이스 자동 업데이트 방지가 2 단계 프로세스임을 알게되었습니다.
1 단계 : :
getSession().setFlushMode(FlushMode.MANUAL) // [FlushMode.NEVER is depracated in 4.x]
2 단계 :
getSession().clear(); //This will actually discard all changes
from https://stackoverflow.com/questions/8190926/transactional-saves-without-calling-update-method by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] json 콘텐츠를 반환하지 않는 봄 mvc - 오류 406 (0) | 2018.12.14 |
---|---|
[SPRING] RestTemplate으로 큰 파일을 전달하는 방법? (0) | 2018.12.14 |
[SPRING] localhost 외에 IP 주소로 요청을 듣기 위해 Spring과 통합 된 임베디드 Tomcat을 구성하는 방법은 무엇입니까? (0) | 2018.12.14 |
[SPRING] 스프링 부트에서 @Repository 주석이 달린 인터페이스를 Autowire 할 수 없음 (0) | 2018.12.14 |
[SPRING] Spring @Scheduled 주석이 달린 메서드는 다른 스레드에서 실행됩니까? (0) | 2018.12.14 |