使用JSF2,EJB3,JPA2的事务

时间:2013-02-25 18:53:30

标签: jpa jsf-2 ejb

在此环境中处理交易的最佳方法是什么?

我有一个Transacao课程,里面有一系列Transacao。

public class Transacao {
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "pai")
    private List<Transacao> filhos;
}

我从EJB中加载这个,如:

public class TransacaoBean {

    @EJB
    private TransacaoService transacaoService;

    private void edit(Long id) {
        this.transacao = transacaoService.findById(id);
    }
}

但是,如果我想获得filhos的集合,我必须这样做:

public class TransacaoBean {

    ...

    private void edit(Long id) {
        this.transacao = transacaoService.findById(id);
        log.info(this.transacao.getFilhos.size()); //this throws a LazyInitializationException
    }
}

我得到了一个例外。

在我的JSF中加载它的最佳方法是什么?我正在考虑创建一个Filter并使用USerTransaction来保持事务对请求开放或在我的EJB中获取filhos。有没有更好的解决方案,哪个更好?

1 个答案:

答案 0 :(得分:0)

fetch的{​​{1}}默认值为@OneToMany

您可以将其FetchType.LAZY设置为在非托管环境中使用它们。

或者您可以创建另一个EJB或方法来获取列表或只是大小。

FetchType.EAGER