0
我想在JPA中複製實體(本例中爲PageEntity)。複製JPA中的實體
這是我的代碼:
@Override
public PageEntity copyPage(Long pageId, PageEntity pageEntity) {
PageEntity pageToCopy=new PageEntity();
BeanUtils.copyProperties(findOne(pageId),pageToCopy);
//Save new template
TemplateEntity templateCopy = pageToCopy.getTemplate();
templateCopy.setBlocks(null);
templateCopy.setId(null);
TemplateEntity copiedTemplate = templateDao.saveAndFlush(templateCopy);
//Save new page
pageEntity.setTemplate(copiedTemplate);
Long copiedPageId=pageDao.saveAndFlush(pageEntity).getId();
//Save blocks and parameters
List<BlockEntity> blockCopy = pageToCopy.getTemplate().getBlocks();
for(BlockEntity block : blockCopy){
block.setId(null);
block.setTemplateId(copiedTemplate.getId());
for(ParameterEntity parameter : block.getParameters()){
parameter.setId(null);
}
blockDao.saveAndFlush(block);
}
return pageDao.findOne(copiedPageId);
}
的問題是,我不能改變ID - 我總是得到一個異常:
"identifier of an instance of de.smava.dao.entity.TemplateEntity was altered from 1 to null; nested exception is org.hibernate.HibernateException: identifier of an instance of de.smava.dao.entity.TemplateEntity was altered from 1 to null",
我完全得到這意味着什麼 - 但仍然。我需要複製整個頁面並創建一個新的ID。如何實現這一目標?
如果你的模型允許它清除標識應該工作 - _if實體是detached_,即它們不能在Hibernate的Session了緩存。或者,您可能需要考慮創建實體的克隆,例如通過使用諸如maptruct或Dozer的映射庫。 – Thomas
感謝您的提示:)將嘗試 –