JPA:将空的Fetch结果加入NULL空
我在User和GameMap之间有一对多的关系。 一个用户可以拥有许多地图。
用户类:
// LAZY LOADED @OneToMany(cascade = CascadeType.ALL, mappedBy = "creater") private final List maps = new ArrayList();
但是,有时我需要急于加载地图。 为了避免在关闭Session之后出现LazyInitializationException ,我有两种检索用户的变体。
用户存储库:
public interface UserRepository extends JpaRepository { Optional 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用户。
@Query("SELECT u FROM User u LEFT JOIN FETCH u.maps WHERE u.id = (:id)") public User findByIdEagerFetch( @Param("id") Long id );
- 在Spring的Session Expiry之前执行自定义事件
- Spring Hibernate Template执行方法返回Oracle上的计数查询的对象类型是什么?
- Hibernate:org.hibernate.LazyInitializationException:无法初始化代理 – 没有会话
- Hibernate + Java上的性能降低,但是当我使用相同的本机Oracle查询的TOAD时速度很快
- Hibernate – ServiceRegistryBuilder
- JPA插入父/子会导致MySQLIntegrityConstraintViolationException
- org.hibernate.MappingException:没有JDBC类型的Dialect映射:1111
- 如何在Hibernate中设置内部查询的限制?
- 在数据库中使用Java 8 LocalDate和LocalDateTime进行Hibernate