我正在尝试使用JPA更新现有记录。以下链接似乎表明,更新记录的唯一方法是为其编写更新查询。 enter link description here使用openJPA持久更新查询
这很好。但是,我想知道为什么我将这个存储过程用于开放JPA的魔法? 我想,如果我有一个JPA对象,如果我想坚持到数据库使用类似于此
emf.persist(launchRet)
通话的JPA框架将检查是否记录媒体链接存在的情况下,如果是这样,它会继续对该记录进行更改,如果没有,则只会添加一条新记录。这将是非常酷的。相反,我将不得不最终在更新查询中自己编写所有这些逻辑。这很好,但为什么我不能只使用存储过程并将所有必需的值传递给它?
UPDATE:CODE解释什么是我最后的评论是关于
try{
launchRet = emf.find(QuickLaunch.class, launch.getQuickLaunchId());
if(launchRet==null){
emf.getTransaction().begin();
emf.persist(launchRet);
emf.getTransaction().commit();
}
else{
emf.refresh(launchRet);
}
}
变量启动被传递到方法...
public QuickLaunch UpdateQuickLaunchComponent(QuickLaunch launch)
我会简单刚才设置的发现推出launchRet等于到通过的发射?
那么这是好的,但是我有一个已经someExistingFoo,我想坚持吗?例如,有人通过FooId搜索someExistingFoo,如果找到了,我应该将它设置为等于已经传入的someExistingFoo对象吗?我会举一个例子来解释我在说什么。 – SoftwareSavant
请参阅我对答案的编辑。 –
啊哈......资本好的先生。我记得在某处读了一些关于entityManager.Merge(Object obj)的东西,我想我没有建立连接。感谢您的领导! – SoftwareSavant