当前位置: 首页 > 面试题库 >

Entitymanager.flush()与EntityManager.getTransaction()。commit-我应该首选什么?

督坚白
2023-03-14
问题内容

更新数据库时我更喜欢什么?哪种方法的优缺点是什么,什么时候应该使用另一种方法?

public void disemployEmployee(Integer employeeId, Date endDate) {
    Employee employee = (Employee)em.find("Employee", employeeId);
    employee.getPeriod().setEndDate(endDate);
    em.flush();
}

public void disemployEmployee(Integer employeeId, Date endDate) {
    Employee employee = (Employee)em.find("Employee", employeeId);
    em.getTransaction().begin();
    employee.getPeriod().setEndDate(endDate);
    em.getTransaction().commit();
}

问题答案:

在第一个示例中,对数据的更改在遇到刷新后会反映在数据库中,但仍在事务中。

但是在第二个示例中,您将立即提交事务。因此,对数据库所做的更改以及事务也在那里结束。

有时,刷新可能有助于将数据保留在正在进行的事务之间,然后最终提交更改。因此,如果以后发生某些问题,例如批量插入/更新,您也可以回滚以前的更改。



 类似资料:
  • 问题内容: 违反情况是“避免使用类似’ArrayList’的实现类型;而应使用接口”。 以下行将纠正违规: 为什么要用后者List代替ArrayList? 问题答案: 在具体类型上使用接口是实现良好封装和松散耦合代码的关键。 在编写自己的API时遵循这种做法甚至是个好主意。如果这样做,以后您会发现,将单元测试添加到代码中(使用Mocking技术),并在将来需要时更改基础实现会更容易。

  • 问题内容: 有人可以建议当今这些库的最佳用途是什么?仅仅是GUI,还是它们也具有数据库,XML,网络,线程等支持? 我正在阅读有关它们的内容,并考虑开始学习/使用其中之一。 最常见的是什么?它们之间有什么区别?为什么要选择一个? 问题答案: 因为您似乎主要针对Linux,所以选择主要取决于您要使用的编程语言。 如果您使用C编写代码,那么显然可以使用GTK + 如果您使用C 编写代码,请使用Qt,否

  • 问题内容: 我有一个将对象保存到数据库的EJB。在我看到的一个示例中,一旦保存了此数据(EntityManager.persist),就会调用EntityManager.flush();。为什么我需要这样做?我要保存的对象未附加,以后在该方法中也不会使用。实际上,一旦保存,该方法就会返回,并且我希望资源会被释放。(示例代码也在remove调用上执行此操作。) 问题答案: 调用将强制数据立即被持久保

  • 问题内容: 我正在使用Max OS X Mountain Lion,java -version返回“ 1.6.0_37”。但是我无法使用导入的com.apple.eawt。*类编译项目。 我必须安装什么才能在系统上安装Apple Java Extensions? 任何帮助,将不胜感激! 更新 : 我从编译器收到以下错误: 更新2 : XCode版本4.5.2已安装 更新3 : 我的问题的原因是在类

  • 我的老师让我这样做,但在评论区我被告知我不应该这样做。 为什么?

  • 问题内容: 通常,您需要编写如下代码: 这似乎有点冗长,而且我还听说使用强制解包运算符可能是不安全的,最好避免使用。有没有更好的方法来解决这个问题? 问题答案: 几乎总是没有必要检查可选项是否没有。几乎唯一需要这样做的时间是,如果它的-ness是 唯一 要了解的内容–您不在乎值的含义,而不必在意。 在大多数其他情况下,还有一些Swift速记可以更安全,简洁地为您完成任务。 如果不是,则使用该值 代