Spring 数据 JPA 查询方法查找所有空列表对象 属性
Spring Data JPA Query method to find all objects with empty list property
我有一个包含 属性 列表的实体:
@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;
}
...
}
在存储库中,我想要一个查询方法,其中 returns 所有 jobShipments
为空列表的作业。我首先尝试了 IsNull
关键字,如下所示,但这不起作用,因为如果没有发货,它是一个空列表而不是空列表。
@Repository
public interface JobRepository extends CrudRepository<Job, Integer> {
Page<Job> findByJobShipmentsIsNull(Pageable pageable);
}
我查看了文档中的关键字,希望找到类似 IsEmpty
的内容,但我找不到任何看起来正确的内容。
我正在寻找使用关键字而不是编写查询的答案,但我想这将是后备方法。谢谢!
事实证明,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
存储库查询的结果相匹配。所以即使它返回一个空数组,它仍然像我的查询一样找到空条目。
实际上,集合有关键字 IsEmpty
和 Empty
:
@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>();
}
我有一个包含 属性 列表的实体:
@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;
}
...
}
在存储库中,我想要一个查询方法,其中 returns 所有 jobShipments
为空列表的作业。我首先尝试了 IsNull
关键字,如下所示,但这不起作用,因为如果没有发货,它是一个空列表而不是空列表。
@Repository
public interface JobRepository extends CrudRepository<Job, Integer> {
Page<Job> findByJobShipmentsIsNull(Pageable pageable);
}
我查看了文档中的关键字,希望找到类似 IsEmpty
的内容,但我找不到任何看起来正确的内容。
我正在寻找使用关键字而不是编写查询的答案,但我想这将是后备方法。谢谢!
事实证明,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
存储库查询的结果相匹配。所以即使它返回一个空数组,它仍然像我的查询一样找到空条目。
实际上,集合有关键字 IsEmpty
和 Empty
:
@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>();
}