#java #hibernate #jpa
#java #переход в спящий режим #jpa
Вопрос:
мне нужна некоторая помощь, мой код приведен ниже.
@Override
public SEDocumentListWidget clone() throws CloneNotSupportedException {
final SEDocumentListWidget clone = (SEDocumentListWidget) super.clone();
final Set<SEDocumentListCategoryList> listCopy = new HashSet<>(clone.getDocumentListCategoryList());
SEEntityManager.flush();
SEEntityManager.detach(listCopy);
for (SEDocumentListCategoryList listItem: listCopy) {
listItem.setOid(UUID.randomUUID().toString());
}
final Set<SEDocumentListCategoryList> listCopyMerged = SEEntityManager.getEntityManager().merge(listCopy);
clone.setDocumentListCategoryList(listCopyMerged);
return clone;
}
Когда я запускаю его, он выдает следующую ошибку:
Вызвано: org.hibernate.Исключение PersistentObjectException: отделенная сущность передается в persist: com.softexpert.dashboard.entity.SEDashboard
Это может быть что-то очень простое, любая помощь была бы оценена, это также похоже на конкретную проблему с этой строкой:
final Set<SEDocumentListCategoryList> listCopyMerged = SEEntityManager.getEntityManager().merge(listCopy);
@EDIT Добавлен объект SEDocumentListCategoryList
package com.softexpert.dashboard.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.softexpert.platform.annotation.Audit;
import com.softexpert.platform.artefacts.EntityObject;
/**
*
* @author elia.melfior
*
*/
@Entity
@Audit(dataChange = true, dataLoad = false)
@Table(name = "SEDOCUMENTLISTCATEGORYLIST")
public class SEDocumentListCategoryList extends EntityObject {
private static final long serialVersionUID = 1L;
private Integer cdCategory;
@Column(name = "CDCATEGORY")
public Integer getCdCategory() {
return this.cdCategory;
}
public void setCdCategory(Integer cdCategory) {
this.cdCategory = cdCategory;
}
}
Комментарии:
1. Можете ли вы вставить
SEDocumentListCategoryList
сущность?2. конечно, я отредактирую свой пост с этим:
3. Спасибо, не могли бы вы также добавить
EntityObject
? 🙂4. она довольно большая, у нее есть еще два атрибута: OID, который является первичным ключом, и NRVERSION, который является другим
Ответ №1:
Глядя на ваш код, я думаю, вы хотите скопировать постоянные объекты и сохранить их с новым идентификатором. В этом случае, я думаю, вы должны использовать persist()
вместо merge()
(который пытается обновить ваши отделенные сущности).