Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvidas com join em criteria

Ao analisar o código abaixo, tenho um join na propriedade categorias, mas não preciso disso para a prorpiedade loja. Isso acontece porque? Meu paltipe é que, como a lista de categorias esta mapeada como ManyToMany(ao contrário do mapeamento para propriedade loja, que é ManyToOne), então seu fetch é do tipo Lazy, então tenho que forçar a busca com o join do criteria, que é o mesmo que fazer join fecth na jpql, estou certo?

@Transactional
public List<Produto> getProdutos(String nome, Integer categoriaId, Integer lojaId) {
    Session session = em.unwrap(Session.class);
    Criteria criteria = session.createCriteria(Produto.class);

    if (!nome.isEmpty()) {
        criteria.add(Restrictions.like("nome", "%" + nome + "%"));
    }

    if (lojaId != null) {
        criteria.add(Restrictions.like("loja.id", lojaId));
    }

    if (categoriaId != null) {
        criteria.setFetchMode("categorias", FetchMode.JOIN)
            .createAlias("categorias", "c")
            .add(Restrictions.like("c.id", categoriaId));
    }

    return (List<Produto>) criteria.list();
}
1 resposta
solução!

Opa Alexandre, você está certo sim!