JPA: Associe resultados da busca a NULL no lado muitos vazio
Eu tenho uma relação de um para muitos entre Usuário e GameMap. Um usuário pode ter muitos mapas.
Classe de usuário:
// LAZY LOADED
@OneToMany(cascade = CascadeType.ALL, mappedBy = "creater")
private final List<GameMap> maps = new ArrayList<>();
No entanto, às vezes eu preciso carregar com entusiasmo os mapas. Para evitar oLazyInitializationException depois de encerrar a sessão, tenho duas variantes para recuperar usuários.
Repositório do Usuário:
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findById( Long id );
@Query("SELECT u FROM User u JOIN FETCH u.maps WHERE u.id = (:id)")
public User findByIdEagerFetch( @Param("id") Long id );
}
Problema:
No entanto, a variante JPQL JOIN FETCH para carregar rapidamente de uma só vez o usuário e seus mapas retornam um usuário NULLse não houver mapas para esse usuário na tabela.
Pergunta, questão:
Como posso reescrever a instrução JPQL para recuperar o usuário e, opcionalmente (!) Todos os seus mapas, mas se não houver mapas, tudo bem, mas não retorne um usuário NULL.