Spring Data JpaRepository为查询中未引用的实体设置null

时间:2016-05-15 15:48:15

标签: spring hibernate spring-data-jpa

我有返回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")

设备始终为空。

当我运行第一个请求然后在同一个事务上运行第二个请求时,它确实有效!

1 个答案:

答案 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")