使用Spring Data JPA查询方法查找所有具有空列表属性的对象

4

我有一个实体,其中包含一个属性,该属性是一个列表:

@Entity
@Table(name="sales.jobs")
public class Job {
    ...
    private List<Shipment> jobShipments;
    ...
    @OneToMany(cascade=CascadeType.ALL,orphanRemoval=true, fetch=FetchType.LAZY)
    @JoinTable(name="sales.jobs_shipments",
           joinColumns = @JoinColumn(name="fk_jobid", referencedColumnName="pk_jobid"),
           inverseJoinColumns = @JoinColumn(name="fk_shipmentid", referencedColumnName="pk_shipmentid"))
    public List<Shipment> getJobShipments() {
        return jobShipments;
    }

    public void setJobShipments(List<Shipment> jobShipments) {
        this.jobShipments = jobShipments;
    }
    ...
}

在存储库中,我想要一个查询方法,该方法返回所有其中jobShipments是空列表的作业。我最初尝试了下面显示的IsNull关键字,但这不起作用,因为如果没有货运,它将是一个空列表而不是null。

@Repository
public interface JobRepository extends CrudRepository<Job, Integer> {
    Page<Job> findByJobShipmentsIsNull(Pageable pageable);
}

我在文档中查找关键字,希望能找到类似于IsEmpty的内容,但我没有找到看起来正确的内容。
我正在寻找一个使用关键字而不是编写查询的答案,但我想那可能是备选方案。谢谢!
2个回答

4

实际上,对于集合,有关键字 IsEmptyEmpty:

@Repository
public interface JobRepository extends CrudRepository<Job, Integer> {
    Page<Job> findByJobShipmentsIsEmpty(Pageable pageable);
}

@Entity
@Table(name="sales.jobs")
public class Job {
    ...
    @OneToMany(cascade=CascadeType.ALL,orphanRemoval=true, fetch=FetchType.LAZY)
    @JoinTable(name="sales.jobs_shipments",
           joinColumns = @JoinColumn(name="fk_jobid", referencedColumnName="pk_jobid"),
           inverseJoinColumns = @JoinColumn(name="fk_shipmentid", referencedColumnName="pk_shipmentid"))
    private List<Shipment> jobShipments = new ArrayList<Shipment>();
}

请参见附录C:存储库查询关键字


谢谢。我一定不小心错过了附录。 - Tim

0
事实证明,IsNull 实际上是有效的。我检查了 IsNotNull 作为参考点,它给了我所有有货运的工作。然后我运行了这个查询。
SELECT COUNT(*) FROM sales.jobs AS jobs
    LEFT JOIN sales.jobs_shipments AS ship ON jobs.PK_JobID = ship.FK_JobID
WHERE ship.FK_ShipmentID IS NULL;

那个查询的计数与IsNull存储库查询的结果匹配。因此,即使它返回一个空数组,它仍然像我的查询一样找到了空条目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接