【发布时间】:2017-10-08 08:02:05
【问题描述】:
我在 User 和 GameMap 之间有一对多的关系。一个用户可以拥有多张地图。
用户类别:
// LAZY LOADED
@OneToMany(cascade = CascadeType.ALL, mappedBy = "creater")
private final List<GameMap> maps = new ArrayList<>();
但是,有时我需要预先加载地图。为了避免在关闭 Session 后出现 LazyInitializationException,我有两种检索用户的变体。
用户存储库:
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 用户。
【问题讨论】:
-
使用“左连接”
标签: java hibernate jpa spring-data lazy-loading