Como podemos ver em https://thorben-janssen.com/5-ways-to-initialize-lazy-relations-and-when-to-use-them/ , utilizar um getAtributoLazy logo após um entityManager.find pode não ser uma boa ideia, pois a cada getEntitdadeLazy teremos um select adicional no banco.
Como dito no artigo, em uma aplicação pequena isso pode não fazer muita diferença, mas em uma aplicação com 100 usuários paralelos isso pode acrescentar 500 requisições no banco de dados, desnecessariamente.
Aqui entendi que não é interessante fazer dessa uma abordagem padrão.
Porém, uma das vantagens de se anotar campos lazy em conjunto com a utilização de JSF é que, em páginas de pesquisa, os campos lazy não são carregados (comportamento esperado), pois o que se deseja são informações mais básicas. Mas estes campos lazy são carregados "automaticamente" quando se acessa uma página de edição, pois os próprios componentes (como selectOneMenu e dataTable) ao solicitarem as informações, fazem com que o entityManager busque-as no banco de dados.
A dúvida que eu estava era se as informações solicitadas ao BD pelos componentes eram retornadas na mesma transação ou se seriam em transações diferentes, mas enquanto escrevia essas linhas fiz o teste, e confirmei que de fato são em transações diferentes.
Em outras palavras, é feito um select para cada componente associado a um campo lazy, ao utilizar-se da técnica de carregar "automaticamente" as informações de um objeto através de um entityManager.find no Converter.
Para contornar esse problema, pensei em duas estratégias:
Estratégia 1: No converter, em vez de um entityManager.find, utilizar um método com join fetch, para já trazer todas as outras informações na mesma consulta/transação;
Estratégia 2: Manter o converter da mesma forma que está (sem retornar as informações lazy), e criar um outro método no controller que retornará todas as informações (utilizando join fetch).
No momento, entendo que a segunda opção é a melhor, principalmente pelo fato de que o JSF utiliza os converters para buscar informações para diversos componentes, e não necessariamente preciso de todas as informações em um objeto se o que exibirei é a descrição em um selectOneMenu.
Gostaria de saber a opinião do professor/instrutures. ;)