我有返回Run对象的JpaRepository,其中每个Run对象与Device有@ManyToOne
的关系。所有关系都以正确的形式设置。
但是,当我运行这样的请求时:
@Query("SELECT a FROM Run a WHERE a.date >= :startDate AND a.date <= :endDate AND (a.device.treeName IN (:devices))")
运行对象具有对设备的正确引用。
但是对于这个要求:
@Query("SELECT a FROM Run a WHERE a.date >= :startDate AND a.date <= :endDate")
设备始终为空。
当我运行第一个请求然后在同一个事务上运行第二个请求时,它确实有效!
答案 0 :(得分:0)
这种情况正在发生,因为在第一种情况下,由于您在where子句中检查a.device.treeName IN (:devices)
,因此也会加载设备对象。
在第二种情况下,因为我猜你已经将延迟加载设置为true,所以它没有加载,所以你将设备设为NULL。
尝试以下:
@Query(" FROM Run a WHERE a.date >= :startDate AND a.date <= :endDate")
请尝试下面的内容:
@Query(" select a FROM Run a JOIN FETCH a.device WHERE a.date >= :startDate AND a.date <= :endDate")