gpt4 book ai didi

jpa - 使用 openJPA 更新记录时的最佳实践

转载 作者:行者123 更新时间:2023-12-01 12:54:51 25 4
gpt4 key购买 nike

我想知道使用 JPA 更新记录的最佳实践是什么?我目前已经设计了自己的模式,但我怀疑这绝不是最佳实践。我所做的基本上是查看记录是否在数据库中,如果找不到,我会调用 enityManager.persist(object<T>)方法。如果它确实存在,我会调用 entityManager.Merge(Object<T>)方法。

我问的原因是,我发现 merge 方法查看记录是否已准备就绪在数据库中,如果不在数据库中,则继续添加它,如果是, 它使更改成为必要。另外,您是否需要在 getTransaction().begin() 和 getTransaction.commit() 中嵌套合并调用?这是我到目前为止所拥有的...

   try{
launchRet = emf.find(QuickLaunch.class, launch.getQuickLaunchId());
if(launchRet!=null){
launchRet = emf.merge(launch);
}
else{
emf.getTransaction().begin();
emf.persist(launch);
emf.getTransaction().commit();
}
}

最佳答案

如果您尝试保存的实体已经有一个 ID,那么它必须存在于数据库中。如果它不存在,您可能不想盲目地重新创建它,因为这意味着其他人已经删除了该实体,更新它没有多大意义。

merge() 方法保留一个尚未持久化的实体(没有 ID 或版本),如果它是持久化的,则更新该实体。因此,除了调用 merge() 并将此调用返回的值返回给 merge() 之外,您不需要执行任何操作。

事务是功能性的原子工作单元。应该在更高的层次(服务层)进行划界。例如,将资金从一个账户转移到另一个账户需要在同一笔交易中完成两个账户更新,以确保这两个更改要么成功要么失败。从一个帐户中取出资金而未能将其添加到另一个帐户将是一个重大错误。

关于jpa - 使用 openJPA 更新记录时的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10397322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com