JPA: Unir los resultados de Fetch a NULL en muchos lados vacíos
Tengo una relación de uno a muchos entre Usuario y GameMap. Un usuario puede tener muchos mapas.
Clase de usuario:
// LAZY LOADED
@OneToMany(cascade = CascadeType.ALL, mappedBy = "creater")
private final List<GameMap> maps = new ArrayList<>();
Sin embargo, a veces necesito cargar ansiosamente los mapas. Para evitar elLazyInitializationException después de cerrar la sesión, tengo dos variantes para recuperar usuarios.
Repositorio de usuario:
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:
Sin embargo, la variante JPQL JOIN FETCH para cargar ansiosamente de una vez el usuario y sus mapas devuelven un usuario NULLsi no hay mapas para este usuario en la tabla.
Pregunta:
¿Cómo puedo reescribir la declaración JPQL para recuperar al usuario y opcionalmente (!) Todos sus mapas, pero si no hay mapas, está bien, pero no devuelva un usuario NULL.