Java OpenJpa合并分离对象
我想知道我用OpenJPA2保存实体的方法是否正确 我从我反序列化的rest服务接收对象,然后保存此实例:Java OpenJpa合并分离对象,java,jpa,openjpa,Java,Jpa,Openjpa,我想知道我用OpenJPA2保存实体的方法是否正确 我从我反序列化的rest服务接收对象,然后保存此实例: 开始交易 从数据库中检索实例(即使我已经得到了这个实例) 将分离实例的属性复制到从数据库检索的实例 调用合并 提交事务 如果是一个复杂的实体模型,它会变得很痛苦 public boolean save(收集事件)引发DataException{ 如果(事件==null){ 抛出新的DataException(“无法保存空事件”); } EntityManager em=getEntityM
public boolean save(收集事件)引发DataException{
如果(事件==null){
抛出新的DataException(“无法保存空事件”);
}
EntityManager em=getEntityManager();
试一试{
em.getTransaction().begin();
对于(事件:事件){
布尔加法=真;
if(event.getKey()>0){
Event-previousEvent=em.find(Event.class,Event.getKey());
if(previousEvent!=null){
//更新
setTitle(event.getTitle());
previousEvent.setDate(event.getDate());
previousEvent.setDescription(event.getDescription());
列表参与者=新建ArrayList();
for(成员m:event.getParticipants()){
Member participant=em.find(Member.class,m.getKey());
如果(参与者!=null){
参与者。添加(参与者);
}
}
previousEvent.setParticipants(参与者);
列表注册者=新ArrayList();
对于(成员m:event.getRegistrants()){
成员注册者=em.find(Member.class,m.getKey());
如果(注册人!=null){
参与者。添加(注册人);
}
}
先前事件。设置注册人(注册人);
em.merge(先前事件);
add=false;
}
}
如果(添加){
//加
em.persist(事件);
}
}
em.getTransaction().commit();
}捕获(PersistenceException pe){
pe.printStackTrace();
抛出新的DataException(“保存事件时发生错误”,pe);
}最后{
em.close();
}
返回true;
}
有什么建议吗
根据Chris的评论,谢谢——你应该可以调用
em.merge(event)
,让JPA处理所有的事情。如果需要,它应该自动处理创建新的事件行、更新事件属性以及更新或创建包含的对象。为什么不使用“合并”而不是从数据库中查找实体?Merge应该查找实体并为您将属性复制到其中。