JPA:将获取结果联接为空多面的 NULL
2022-09-02 12:54:55
我在用户和GameMap之间有一对多的关系。一个用户可以拥有多个地图。
用户类:
// LAZY LOADED
@OneToMany(cascade = CascadeType.ALL, mappedBy = "creater")
private final List<GameMap> maps = new ArrayList<>();
但是,有时我需要急于加载地图。为了避免关闭会话后的懒惰初始化异常,我有两种检索用户的变体。
用户存储库:
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 );
}
问题:
但是,如果表中没有该用户的映射,则 JPQL JOIN FETCH 变体在一次加载用户和他的映射中返回 NULL 用户。
问:
我该如何重写JPQL语句以检索用户和可选的(!)所有映射,但是如果没有映射,那也没关系,但不要返回NULL用户。