【发布时间】:2018-10-22 04:46:56
【问题描述】:
public void postPessoa() {
savePessoa();
initializePessoa();
}
@Transactional(rollbackOn = {Exception.class})
public void savePessoa() {
pessoa = getEntityManager().merge(pessoa);
}
如果我调用postPessoa(),我在merge() 中得到TransactionRequiredException,但如果我直接从JSF 调用savePessoa(),它会起作用,我不明白为什么会出现这种行为。
JSF:
<p:commandButton id="btnSalvar" value="Salvar" action="#{pessoasController.savePessoa}"/>
<p:commandButton id="btnSalvar" value="Salvar" action="#{pessoasController.postPessoa}"/>
【问题讨论】:
-
这实际上不是 JSF 问题。如果您创建了一个好的单元测试,也会发生同样的情况
-
可能,但我想了解为什么直接从jsf调用带注释的方法会改变事务注释的行为。
-
这不是直接从jsf调用它而是直接调用它。看答案。顺便说一句,您使用的是spring还是cdi?答案对 spring 和 cdi 都是正确的
-
我明白了。我正在使用 CDI,但老实说,我在问,因为我不知道我的错误是在 jsf 调用中、在事务中还是在我的 jpa 控制中。在问这里之前我搜索了很多......
-
这就是我提到单元测试的原因。哟然后可以排除的东西。 JSF 在这种情况下