2 개의 테이블이 있는데 항목 및 속성과 둘 다에 매핑 된 최대 절전 모드 개체가 있습니다. 속성에 대한 테이블 항목에 대한 매핑은 다음과 같습니다.최대 절전 모드 트랜잭션이 올바르게 롤백되지 않습니다.
<set name="propertySet" cascade="all-delete-orphan">
<key column="item_id" not-null="true"/>
<one-to-many class="Property"/>
</set>
항목은 여러 속성을 가질 수 있습니다. select와 같은 것은 삽입이 제대로 작동합니다. 그러나 오류가 있으면 등록 정보 테이블에 대한 삽입이 롤백되지 않습니다.
N 속성을 가진 항목을 편집하고 필드에 잘못된 값을 입력하면 다음에 항목을 검색 할 때 2 * N 속성이 생깁니다.
편집 ---
내가 던져지고 스프링 프레임 워크와 가장 낮은 제외하고 주석 거래 (@Transactional)를 사용하고@Autowired
SessionFactory sessionFactory
@Transactional
public void updateItem(Item i){
...
// The only 2 statements dealing with hibernate or session in this function
ItemModel im = sessionFactory.getCurrentSession().get(...);
sessionFactory.getCurrentSession().update(updatedItem);
...
}
처럼 내 수업 보이는 무엇
이
Caused by: org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.Tra
nsactionException: Transaction not successfully started
at org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:679)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:845)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:822)
at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:412)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:111)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)
Caused by: org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:183)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:676)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:845)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:822)
at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:412)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:111)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)
...
...
at org.apache.catalina.valves.SSLValve.invoke(SSLValve.java:113)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:894)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:719)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2101)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
입니다
입니다. 좀 더 명확하게하기 위해 질문이 업데이트되었지만 일부 예외는 있지만 더 많은 디버깅이있었습니다. @Transactional 어노테이션이 이미 나를 대신한다고 가정하기 때문에 더 이상 rollback이나 commit을 요구하지 않는다. – randomThought
제대로 구성되어 있으면 @Transactional은 Spring이 적절한 경우 예외를 시작, 커밋 및 롤백하는 곳에서 선언적 트랜잭션 경계를 설정합니다. 세션을 열거 나 트랜잭션을 시작, 커밋 또는 롤백하는 등의 작업을 수행하는 경우 작업이 방해를받습니다. 게시 한 코드에는 잘못된 것은 없지만 작은 코드 일 뿐이며 거래 구성도 포함되지 않습니다. 예외는 비정상 상태가 발생했음을 나타냅니다. 왜냐하면 Spring은 시작되지 않은 트랜잭션을 커밋/롤백하지 않기 때문입니다. –
어떤 트랜잭션 구성이 필요합니까? spring은 데이터베이스 연결을 처리하기 위해 백엔드에서 c3p0 연결 풀을 사용하고 있습니다. 자체적으로 트랜잭션이나 세션을 열거 나 시작하는 설명이 없습니다. 최대 절전 모드 또는 세션을 처리하는 함수에는 단 2 개의 명령문 만 있습니다. 내 자신의 세션 및 트랜잭션 물건을 시도했지만 그 문제가 될 수도 있지만 어느 쪽도 작동하지 않았다 – randomThought