交易和锁定的jpa考试困惑

use*_*115 3 java exception jpa-2.0

关注来源:

public void create ()
{
  try {
   doA () {
 } catch (PersistenceException e) {}
   try (doB) ();
 } catch (PersistenceException e) {} 
}
Run Code Online (Sandbox Code Playgroud)

调用方法doA将导致抛出NonUniqueResultException.调用方法doB将导致抛出EntityExistsException.有两个选项描述在应用程序中调用创建的方法时会发生什么,使用容器管理的事务?(选择两项):

  • A. doB()永远不会调用方法.
  • B.当前交易将在doA()执行后继续.
  • C.当前交易将在doB()执行后继续.
  • D.当doA()调用时,当前事务将标记为回滚.
  • E.当doB()调用时,当前事务将标记为回滚.

在我看来,正确的答案是B,E.

Mik*_*unu 5

假设语法正确的版本:

public void create() {
    try {
        doA ();
    } catch (PersistenceException e) {}
    try {
        doB();
    } catch (PersistenceException e) {}
}
Run Code Online (Sandbox Code Playgroud)

A.方法doB()永远不会被调用false声明,因为抛出了NonUniqueResultException,这是捕获的PersistenceException,而下一步是调用doB().

B.当doA()执行true 后,当前事务将继续,因为如文档所述,NonUniqueResultException不会导致事务被标记为回滚.

C.当doB()执行false时,当前事务将继续,因为EntityExistsException标记用于回滚的活动事务.

D.当调用doA()时,当前事务将被标记为回滚,因为告知索赔B的原因是错误的,NonUniqueResultException不标记事务以进行回滚.

E.当doB()被调用true时,当前事务将被标记为回滚,因为理由告诉C,EntityExistsException标记事务以进行回滚.