Я сталкиваюсь с objectOptimistrykingFailureException , который был вызван StaleObjectStateException при попытке сохранить объект FlightInstance в моем приложении Spring Boot. Полный след стека выглядит следующим образом: < /p>
rg.springframework.orm.ObjectOptimisticLockingFailureException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [app.bola.flywell.data.model.flight.FlightInstance#16f60701-d478-45ca-bbd4-59fc53aa4ca3]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:325)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:560)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:343)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223)
at jdk.proxy2/jdk.proxy2.$Proxy193.save(Unknown Source)
at app.bola.flywell.services.flightservice.FlyWellFlightInstanceService.createNew(FlyWellFlightInstanceService.java:52)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:727)
at app.bola.flywell.services.flightservice.FlyWellFlightInstanceService$$SpringCGLIB$$0.createNew()
at app.bola.flywell.services.flightservice.FlightInstanceServiceTest.createNewFlightInstance_NewFlightIsCreatedTest(FlightInstanceServiceTest.java:41)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [ a p p . b o l a . f l y w e l l . d a t a . m o d e l . f l i g h t . F l i g h t I n s t a n c e # 1 6 f 6 0 7 0 1 - d 4 7 8 - 4 5 c a - b b d 4 - 5 9 f c 5 3 a a 4 c a 3 ] < b r / > a t o r g . h i b e r n a t e . e v e n t . i n t e r n a l . D e f a u l t M e r g e E v e n t L i s t e n e r . e n t i t y I s D e t a c h e d ( D e f a u l t M e r g e E v e n t L i s t e n e r . j a v a : 4 2 6 ) < b r / > a t o r g . h i b e r n a t e . e v e n t . i n t e r n a l . D e f a u l t M e r g e E v e n t L i s t e n e r . m e r g e ( D e f a u l t M e r g e E v e n t L i s t e n e r . j a v a : 2 1 4 ) < b r / > a t o r g . h i b e r n a t e . e v e n t . i n t e r n a l . D e f a u l t M e r g e E v e n t L i s t e n e r . d o M e r g e ( D e f a u l t M e r g e E v e n t L i s t e n e r . j a v a : 1 5 2 ) < b r / > a t o r g . h i b e r n a t e . e v e n t . i n t e r n a l . D e f a u l t M e r g e E v e n t L i s t e n e r . o n M e r g e ( D e f a u l t M e r g e E v e n t L i s t e n e r . j a v a : 1 3 6 ) < b r / > a t o r g . h i b e r n a t e . e v e n t . s e r v i c e . i n t e r n a l . E v e n t L i s t e n e r G r o u p I m p l . f i r e EventOnEachListener(EventListenerGroupImpl.java:138)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:875)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:846)
at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:258)
at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:248)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:570)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:492)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:253)
at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:604)
at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:534)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:495)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:253)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:192)
at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:667)
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:285)
at org.hibernate.event.internal.DefaultMergeEventListener.merge(DefaultMergeEventListener.java:220)
at org.hibernate.event.internal.DefaultMergeEventListener.doMerge(DefaultMergeEventListener.java:152)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:136)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:89)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:854)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:840)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320)
at jdk.proxy2/jdk.proxy2.$Proxy181.merge(Unknown Source)
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:630)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158)
at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:515)
at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:284)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:752)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:174)
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:149)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:69)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138)
... 20 more
my setup
Я использую Spring Boot со следующими зависимостями:
Сущность flightinstance от родительского класса под названием FlywellModel. Вот соответствующий код: родительский класс (FlywellModel) : базовый класс для всех моделей в системе
детского класса (FlightInstance) : у сущности FlightInstance есть поле PublicId , которое заполняется с использованием @prepersist аннотация в методе oncreate из базового класса FlywellModel
@Entity
@Table(name = "flight_instance")
public class FlightInstance extends FlyWellModel {
@Column(nullable = false)
@FlightNumberSequence(name = "flight_number_sequence", startWith = 1000, incrementBy = 3) , изменение объекта до завершения транзакции. Я подозреваю, что эта модификация может привести к тому, что Hibernate рассматривает сущность как «грязную», что приводит к исключению. сущность, которая структурирована следующим образом: < /p>
[code]@Entity
public class Flight extends FlyWellModel {
private long duration;
private String arrivalCity;
private String departureCity;
private String displayImage;
@OneToOne(cascade = ALL)
private Airport departureAirport;
@OneToOne(cascade = ALL)
private Airport arrivalAirport;
@OneToMany(mappedBy = "flight", cascade = ALL, fetch = EAGER)
private Set instances = new LinkedHashSet();
public FlightInstance addFlightInstance(FlightInstance newInstance){
newInstance.setFlight(this);
instances.add(newInstance);
return newInstance;
}
}
проблема
Исключение возникает при вызове метода сохранения на FlightinstancerePository в Уровень сервиса: Метод обслуживания:
@prepersist на Flightinstance: The Поле PublicId заполнено во время настойчивости, которое изменяет объект во время операции сохранения. < /li>
Вмешательство потока: я подозреваю, что в игре может быть несколько потоков. В то время как одна поток изменяет сущность полета, другой поток может быть одновременно изменять его связанную сущность FlightNstance, вызывая конфликт. До сих пор < /strong> < /p>
Я подозреваю, что проблема может быть связана с полем PublicId, унаследованной от класса FlyWellModel, особенно крючка @Prepersist. Для дальнейшей отладки я внес несколько корректировок: < /p>
< /li>
Отдел модель Flightinstance: я полностью удалил взаимосвязь между моделью FlightNstance и FlywellModel, обеспечивая, чтобы Модель FlightinStance больше не наследует от FlyWellModel и не имеет поля PublicId. Тем не менее, я все еще столкнулся с той же ошибкой. /strong> и FlightInstance, я переименовал FlightInStance на экземпляр, но все еще столкнулся с той же ошибкой. : Я прокомментировал метод oncreate () , аннотированный с @prepersist в модели Flywell , и я взял метод в полете < /strong> модель, но проблема сохранялась. в поле publicId или логика @prepersist . Теперь я еще более запутался, так как эти модификации не разрешили ошибку. Что может быть основной причиной, и как мне подходить к решению? Является ли модификация @prepersist в поле PublicId , вызывающее StaleObjectStateException? Если так, как лучше всего справиться с этим? /li>
Почему летный субъект работает без каких -либо проблем, в то время как субъект FlightInstance < /strong> бросает это исключение в аналогичных условиях?
44. Как я могу решить эту проблему так, чтобы объект FlightInstance правильно сохранен без столкновения staleObjectStateException
Любые руководства или понимание будут очень ценится! Спасибо!
Я сталкиваюсь с [b] objectOptimistrykingFailureException [/b], который был вызван [b] StaleObjectStateException [/b] при попытке сохранить объект FlightInstance в моем приложении Spring Boot. Полный след стека выглядит следующим образом: < /p> [code]rg.springframework.orm.ObjectOptimisticLockingFailureException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [app.bola.flywell.data.model.flight.FlightInstance#16f60701-d478-45ca-bbd4-59fc53aa4ca3]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:325) at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:560) at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:343) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) at jdk.proxy2/jdk.proxy2.$Proxy193.save(Unknown Source) at app.bola.flywell.services.flightservice.FlyWellFlightInstanceService.createNew(FlyWellFlightInstanceService.java:52) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:727) at app.bola.flywell.services.flightservice.FlyWellFlightInstanceService$$SpringCGLIB$$0.createNew() at app.bola.flywell.services.flightservice.FlightInstanceServiceTest.createNewFlightInstance_NewFlightIsCreatedTest(FlightInstanceServiceTest.java:41) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [ a p p . b o l a . f l y w e l l . d a t a . m o d e l . f l i g h t . F l i g h t I n s t a n c e # 1 6 f 6 0 7 0 1 - d 4 7 8 - 4 5 c a - b b d 4 - 5 9 f c 5 3 a a 4 c a 3 ] < b r / > a t o r g . h i b e r n a t e . e v e n t . i n t e r n a l . D e f a u l t M e r g e E v e n t L i s t e n e r . e n t i t y I s D e t a c h e d ( D e f a u l t M e r g e E v e n t L i s t e n e r . j a v a : 4 2 6 ) < b r / > a t o r g . h i b e r n a t e . e v e n t . i n t e r n a l . D e f a u l t M e r g e E v e n t L i s t e n e r . m e r g e ( D e f a u l t M e r g e E v e n t L i s t e n e r . j a v a : 2 1 4 ) < b r / > a t o r g . h i b e r n a t e . e v e n t . i n t e r n a l . D e f a u l t M e r g e E v e n t L i s t e n e r . d o M e r g e ( D e f a u l t M e r g e E v e n t L i s t e n e r . j a v a : 1 5 2 ) < b r / > a t o r g . h i b e r n a t e . e v e n t . i n t e r n a l . D e f a u l t M e r g e E v e n t L i s t e n e r . o n M e r g e ( D e f a u l t M e r g e E v e n t L i s t e n e r . j a v a : 1 3 6 ) < b r / > a t o r g . h i b e r n a t e . e v e n t . s e r v i c e . i n t e r n a l . E v e n t L i s t e n e r G r o u p I m p l . f i r e EventOnEachListener(EventListenerGroupImpl.java:138) at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:875) at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:846) at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:258) at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:248) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:570) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:492) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:253) at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:604) at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:534) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:495) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:253) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:192) at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:667) at org.hibernate.event.internal.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:285) at org.hibernate.event.internal.DefaultMergeEventListener.merge(DefaultMergeEventListener.java:220) at org.hibernate.event.internal.DefaultMergeEventListener.doMerge(DefaultMergeEventListener.java:152) at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:136) at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:89) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:854) at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:840) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320) at jdk.proxy2/jdk.proxy2.$Proxy181.merge(Unknown Source) at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:630) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277) at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:515) at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:284) at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:752) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:174) at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:149) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:69) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) ... 20 more [/code] [b] my setup [/b] Я использую Spring Boot со следующими зависимостями: [code]spring-boot-starter-data-jpa hibernate-core [/code] Сущность [b] flightinstance [/b] от родительского класса под названием FlywellModel. Вот соответствующий код: [b] родительский класс (FlywellModel) [/b]: базовый класс для всех моделей в системе [code]public class FlyWellModel {
@Override public String toString() { return MoreObjects.toStringHelper(this) .add("id", id) .add("publicId", publicId) .toString(); } } [/code] [b] детского класса (FlightInstance) [/b]: у сущности [b] FlightInstance [/b] есть поле PublicId , которое заполняется с использованием [b] @prepersist [/b] аннотация в методе [b] oncreate [/b] из базового класса [b] FlywellModel [/b] [code]@Entity @Table(name = "flight_instance") public class FlightInstance extends FlyWellModel {
@Column(nullable = false) @FlightNumberSequence(name = "flight_number_sequence", startWith = 1000, incrementBy = 3) , изменение объекта до завершения транзакции. Я подозреваю, что эта модификация может привести к тому, что Hibernate рассматривает сущность как «грязную», что приводит к исключению. сущность, которая структурирована следующим образом: < /p> [code]@Entity public class Flight extends FlyWellModel {
@OneToMany(mappedBy = "flight", cascade = ALL, fetch = EAGER) private Set instances = new LinkedHashSet();
public FlightInstance addFlightInstance(FlightInstance newInstance){ newInstance.setFlight(this); instances.add(newInstance); return newInstance; }
} [/code] [b] проблема [/b] Исключение возникает при вызове метода сохранения на [b] FlightinstancerePository [/b] в Уровень сервиса: [b] Метод обслуживания: [/b] [code]@Service public class FlyWellFlightInstanceService {
return response; } [/code] [b] наблюдения [/b] [list] [*] [b] @prepersist [/b] на Flightinstance: The Поле PublicId заполнено во время настойчивости, которое изменяет объект во время операции сохранения. < /li> Вмешательство потока: я подозреваю, что в игре может быть несколько потоков. В то время как одна поток изменяет сущность полета, другой поток может быть одновременно изменять его связанную сущность FlightNstance, вызывая конфликт. До сих пор < /strong> < /p>
Я подозреваю, что проблема может быть связана с полем PublicId, унаследованной от класса FlyWellModel, особенно крючка @Prepersist. Для дальнейшей отладки я внес несколько корректировок: < /p> < /li> Отдел модель Flightinstance: я полностью удалил взаимосвязь между моделью FlightNstance и FlywellModel, обеспечивая, чтобы Модель FlightinStance больше не наследует от FlyWellModel и не имеет поля PublicId. Тем не менее, я все еще столкнулся с той же ошибкой. /strong> и FlightInstance, я переименовал FlightInStance на экземпляр, но все еще столкнулся с той же ошибкой. : Я прокомментировал метод [b] oncreate () [/b], аннотированный с [b] @prepersist [/b] в модели [b] Flywell [/b], и я взял метод в полете [b] < /strong> модель, но проблема сохранялась. в поле publicId [/b] или логика [b] @prepersist [/b]. Теперь я еще более запутался, так как эти модификации не разрешили ошибку. Что может быть основной причиной, и как мне подходить к решению? Является ли модификация [b] @prepersist [/b] в поле PublicId , вызывающее StaleObjectStateException? Если так, как лучше всего справиться с этим? /li> Почему летный субъект работает без каких -либо проблем, в то время как субъект [b] FlightInstance < /strong> бросает это исключение в аналогичных условиях? 44. Как я могу решить эту проблему так, чтобы объект FlightInstance [/b] правильно сохранен без столкновения [b] staleObjectStateException [/b] [/list] Любые руководства или понимание будут очень ценится! Спасибо!