Java 被jpa关于交易和锁定的考试弄糊涂了
提供了以下来源:Java 被jpa关于交易和锁定的考试弄糊涂了,java,exception,jpa-2.0,Java,Exception,Jpa 2.0,提供了以下来源: public void create () { try { doA () { } catch (PersistenceException e) {} try (doB) (); } catch (PersistenceException e) {} } 调用方法doA将导致引发UnuniquereSultException。 调用方法doB将导致抛出EntityExistsException。 哪两个选项描述了当在应用程序中调用创建的方法时,使用容器管理
public void create ()
{
try {
doA () {
} catch (PersistenceException e) {}
try (doB) ();
} catch (PersistenceException e) {}
}
调用方法doA将导致引发UnuniquereSultException。
调用方法doB将导致抛出EntityExistsException。
哪两个选项描述了当在应用程序中调用创建的方法时,使用容器管理的事务时会发生什么?(选择两个):
- A.永远不会调用方法
doB()
- B.执行
后,当前事务将继续doA()
- C.执行
后,当前事务将继续doB()
- D.调用
时,当前事务将被标记为回滚doA()
- E.调用
时,当前事务将被标记为回滚doB()
不需要将当前事务标记为回滚,因为它不会对持久性上下文造成任何损坏ununiqueresultexception
将当前事务标记为回滚,因为它表示持久性上下文与数据库之间存在严重不一致 还请注意,此异常可能是由提交期间的数据库约束失败引起的——在这种情况下,事务无论如何都会回滚,所以EXEPION的语义应该保证在所有情况下回滚EntityExistsException
另请参见他们的Javadocs:,.假设语法正确的版本:
public void create() {
try {
doA ();
} catch (PersistenceException e) {}
try {
doB();
} catch (PersistenceException e) {}
}
A.方法doB()永远不会被调用是false声明,因为捕获到抛出的ununiqueresultexception,即extends PersistenceException,流中的下一步是调用doB()
B.当前事务将在doA()执行为true后继续,因为如文档所述,不会导致事务被标记为回滚
C.在doB()执行后,当前事务将继续执行,因为将活动事务标记为回滚
D.当调用doA()时,当前事务将被标记为回滚。这是false,因为声明B的原因,UnuniquereSultException不会将事务标记为回滚
E.当调用doB()时,当前事务将被标记为回滚。doB()为true,因为声明C的原因,EntityExistsException将事务标记为回滚。我认为应该是C。但我不确定。。。