1

在这种环境中处理事务的最佳方式是什么?

我有一个 Transacao 类,其中包含 Transacao 的集合。

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

我从 EJB 将其加载到 JSF 中,例如:

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 中获取文件。有没有更好的解决方案,哪个更好?

4

1 回答 1

0

的默认fetch值为。@OneToManyFetchType.LAZY

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

或者,您可以制作另一个 EJB 或方法来获取列表或仅获取大小。

public class TransacaoService {

    public Transacao findById(final long id) {
        ...
    }

    public long getFilhosSize(final long id) {
        // SELECT f FROM Transacao AS t WHERE t.pai.id=:id
    }

    @PersistenceContext
    private EntityManager entityManager;
}
于 2013-02-26T12:50:59.833 回答