1
resposta

Por que lojaPath não tem root.join enquanto categoriaPath tem ?

Curso: Curso Java e JPA: Otimizações com JPA2 e Hibernate

Aula 03: Consultas dinâmicas com Criteria API

Por que lojaPath não tem root.join enquanto categoriaPath tem ?

...
public List<Produto> getProdutos(String nome, Integer categoriaId, Integer lojaId) {
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Produto> query = criteriaBuilder.createQuery(Produto.class);
        Root<Produto> root = query.from(Produto.class);

        Path<String> nomePath = root.<String> get("nome");
        Path<Integer> lojaPath = root.<Loja> get("loja").<Integer> get("id");
        Path<Integer> categoriaPath = root.join("categorias").<Integer> get("id");
...
1 resposta

Loja é um atributo "ToOne", já categorias é "ToMany". Mas Criteria é aquele mistério grande, em alguns lugares ele até te deixa usar os dois.