Dac*_*ein 11 java hibernate jpa lazy-loading spring-data
我在User和GameMap之间有一对多的关系.一个用户可以拥有许多地图.
用户类:
// LAZY LOADED
@OneToMany(cascade = CascadeType.ALL, mappedBy = "creater")
private final List<GameMap> maps = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
但是,有时我需要急于加载地图.为了避免在关闭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 );
}
Run Code Online (Sandbox Code Playgroud)
问题:
但是,如果表中没有此用户的映射,则JPQL JOIN FETCH变量可以在一个用户中执行,并且如果该用户没有映射,则他的映射将返回NULL用户.
问题:
如何重写JPQL语句以便检索用户并可选地(!)所有他的地图,但如果没有地图,那可以,但不要返回NULL用户.
And*_*nyk 12
@Query("SELECT u FROM User u LEFT JOIN FETCH u.maps WHERE u.id = (:id)")
public User findByIdEagerFetch( @Param("id") Long id );
Run Code Online (Sandbox Code Playgroud)
您需要FETCH JOINJOIN上的关键字才能获得所有结果,即使是那些没有地图的结果.
| 归档时间: |
|
| 查看次数: |
4445 次 |
| 最近记录: |