Как решить эту ошибку Исключение сбоя оптимистической блокировки объекта в JavaJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как решить эту ошибку Исключение сбоя оптимистической блокировки объекта в Java

Сообщение Anonymous »

У меня возникло исключение сбоя оптимизации объекта, в моей модели есть сообщение, пользователи, комментарий, сообщение, адрес электронной почты и статус. В почтовой службе я реализовал логику создания, редактирования, удаления и т. д., а в пользовательской службе я вызвал почтовую службу и нашел сообщение по его идентификатору, я проверяю пользователя по его идентификатору, а затем создаю список сообщений и добавляю сообщение и возвращаю ответ на сообщение, когда я запускаю тест, он выдает это исключение.
Я пытался использовать @transaction для управления всеми транзакциями, а также добавил @version в модель сообщения, но это все равно не помогло
Это тест
@Test
public void testThatUsersCanUploadPost() throws UserAlreadyExistException, UserNotFoundException, PostNotFoundException {
buildUsersRegistrationRequest();
RegisterUsersResponse registerUserResponse = userService.register(buildUsersRegistrationRequest());
assertNotNull(registerUserResponse);
CreatePostRequest createPostRequest = new CreatePostRequest();
createPostRequest.setReferencePostId(1L);
createPostRequest.setUserId(1L);
createPostRequest.setContent("Software engineering no be garri!!");
createPostRequest.setImageUrl("http://localhost");
createPostRequest.setPostCreatedAt(now());
CreatePostResponse response = postService.createPost(createPostRequest);
assertEquals("Post created successfully", response.getMessage());
CreatePostResponse userCreatedPostResponse = userService.createContent(createPostRequest);
assertEquals("Post created successfully", userCreatedPostResponse.getMessage());
assertNotNull(userCreatedPostResponse);
log.info("userCreatedPostResponse: {}", userCreatedPostResponse);
log.info("response: {}", response);
}


Ниже представлена ​​реализация:
@Override
public CreatePostResponse createContent(CreatePostRequest createPostRequest) throws UserNotFoundException, PostNotFoundException {
CreatePostResponse createPostResponse = postService.createPost(createPostRequest);
Post post = postService.getPostsById(createPostRequest.getReferencePostId());
Users user = userRepository.findById(createPostRequest.getUserId())
.orElseThrow(()-> new UserNotFoundException(String.format("User %s not found", createPostRequest)));
List
listOfPost = user.getPosts();
listOfPost.add(post);
userRepository.save(user);
createPostResponse.setMessage("Content created successfully");
return createPostResponse;
}

Ниже приведена трассировка стека:
org.springframework.orm.ObjectOptimisticLockingFailureException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.fontmedia.africa.nija.fontmedia.data.model.Post#1]

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.$Proxy116.save(Unknown Source)
at com.fontmedia.africa.nija.fontmedia.service.implimentation.PostServiceImpl.createPost(PostServiceImpl.java:32)
at com.fontmedia.africa.nija.fontmedia.service.interfaces.UserServiceTest.testThatUsersCanUploadPost(UserServiceTest.java:66)
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): [com.fontmedia.africa.nija.fontmedia.data.model.Post#1]
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:426)
at org.hibernate.event.internal.DefaultMergeEventListener.merge(DefaultMergeEventListener.java:214)
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.$Proxy112.merge(Unknown Source)
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:626)
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)
... 10 more

2024-12-01T12:45:32.648+01:00 INFO 12584 --- [fontmedia] [ionShutdownHook] j.LocalCo


Подробнее здесь: https://stackoverflow.com/questions/792 ... on-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»