[SPRING] 복잡한 관계가있는 엔티티를 저장할 때의 StaleStateException
SPRING복잡한 관계가있는 엔티티를 저장할 때의 StaleStateException
필자가 데이터베이스 (Oracle)에 저장하고있는 최대 절전 모드 엔티티에는 많은 관련 엔터티가 있다는 점에서 매우 복잡한 관계가 있습니다. 다음과 같이 보입니다.
@Table(name = "t_HOP_CommonContract")
public class Contract {
@Id
private ContractPK id;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private ContractGroupMember contractGroupMember;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "TransactionId", referencedColumnName = "TransactionId"),
@JoinColumn(name = "PrimaryContractId", referencedColumnName = "PrimaryContractId")
})
@Fetch(FetchMode.SUBSELECT)
private List<ContractLink> contractLinks;
// . . . . . . .
// A couple of more one to many relationships
// Entity getters etc.
}
나는 또한 같은 두 개의 엔티티가 ...
@Table(name = "t_HOP_TRS")
public class TotalReturnSwap {
@Id
private ContractPK id;
// Entity Getters etc.
}
트릭은 동일한 트랜잭션에서 Contract 및 TotalReturnSwap 항목의 지속성을 유지해야한다는 것입니다.
때로는 동일한 트랜잭션에서 지속되어야하는 엔티티의 집합 일 수 있습니다.
TotalReturnSwap 엔터티를 저장할 때 다음 예외가 있음을 알았습니다 (계약 엔터티를 저장 한 후에 항상 수행됨).
org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:675) \
at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:793)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:664)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:147)
at com.rbs.fcg.publishing.DownstreamContractBusinessEventPostingService.performTDWPersistenceForContracts(DownstreamContractBusinessEventPostingService.java:102)
at com.rbs.fcg.publishing.DownstreamContractBusinessEventPostingService.persistContractBusinessEvent(DownstreamContractBusinessEventPostingService.java:87)
at com.rbs.fcg.publishing.DownstreamContractBusinessEventPostingService.publish(DownstreamContractBusinessEventPostingService.java:67)
at com.rbs.fcg.publishing.PublishingProcessor.publish(PublishingProcessor.java:76)
at com.rbs.fcg.publishing.PublishingProcessor.process(PublishingProcessor.java:52)
at com.rbs.are.MultiThreadedQueueItemProcessor$2.run(MultiThreadedQueueItemProcessor.java:106)
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)
Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:85)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:70)
이제는 질문에 대답하는 데 도움이되는 몇 가지 요령이 있습니다.
해결법
-
==============================
1.오류는 여러 가지 원인으로 발생할 수 있습니다.
오류는 여러 가지 원인으로 발생할 수 있습니다.
나는 그것을 위해 신용을 얻지 않고있다, 그것을 여기에서 발견했다.
-
==============================
2.이것은 다음과 같은 상황에서 나에게 일어났다.
이것은 다음과 같은 상황에서 나에게 일어났다.
대답은 개체를 업데이트하거나 데이터베이스에서 개체의 새로운 인스턴스를 검색해야한다는 것입니다.
from https://stackoverflow.com/questions/11733803/stalestateexception-when-saving-entity-with-complex-relations by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring RowMapper 인터페이스는 정확히 어떻게 작동합니까? (0) | 2019.03.31 |
---|---|
[SPRING] Spring MVC에서 http 요청 헤더를 기반으로 json을 동적으로 멋지게 출력하는 방법은 무엇입니까? (0) | 2019.03.31 |
[SPRING] 데이터베이스의 Spring 설정 (0) | 2019.03.31 |
[SPRING] @Document가있는 몽고 멀티 입주 (0) | 2019.03.31 |
[SPRING] Spring LdapAuthentication 및 로컬 데이터베이스에서 롤로드 (0) | 2019.03.31 |