У меня есть следующие отображения в 2 моей фасолиNonUniqueObjectException: Другой объект с тем же значением идентификатора уже был связан с сессией
Родитель Bean
@OneToMany(fetch = FetchType.LAZY, mappedBy = "application")
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
@JsonIgnore
private Set<ApplicationBuildVO> applicationBuilds = new HashSet<ApplicationBuildVO>(0);
Ребенок Bean
@ManyToOne(fetch = FetchType.LAZY)
@Cascade({CascadeType.SAVE_UPDATE})
@JoinColumn(name = "APPLICATION_ID", nullable = false)
@JsonIgnore
private ApplicationVO application;
В моем методе обслуживания - я выполняю поиск на Application bea п Создание приложения ребенка боб - который имеет ссылку на родительский приложения
Тогда - когда я пытаюсь обновить значение на родительском компоненте в том же методе обслуживания я получаю следующую ошибку
Caused by: org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session : [com.domain.dao.ApplicationVO#1]
at org.hibernate.engine.internal.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:617)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:301)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:244)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
Код моей услуги (снятый) выглядит следующим образом:
public boolean performBuild(Integer applicationId) {
ApplicationVO applicationVO = applicationServices.findAnyApplicationId(applicationId);
ApplicationBuildVO androidApplicationBuildVO = new ApplicationBuildVO();
androidApplicationBuildVO.setIsAndroid(true);
androidApplicationBuildVO.setIsSuccess(appBuildSuccessful);
androidApplicationBuildVO.setApplication(applicationVO);
androidApplicationBuildVO.setSoftwareVersion(androidSoftwareVersionVO);
androidApplicationBuildVO.setS3BucketName(mobileAppsBucketName);
androidApplicationBuildVO.setS3ArtifactKey(androidArtifact);
Integer applicationBuildId = applicationBuildServices.saveApplicationBuild(androidApplicationBuildVO);
applicationVO.setIsCurrentlyBeingBuilt(false);
boolean updateApplicationResult = applicationServices.updateApplication(applicationVO);
}
Любые идеи, что я могу сделать для решения этой проблемы?
Вы не могли бы выслать код своего обновления? –
Уверен - только что обновил сообщение –
Как назначаются ваши '@ Id'? Я предполагаю, что с помощью какого-то '@ GeneratedValue' ... – Powerlord