spring - 创建动态查询以根据多个 where 条件从数据库中获取条目
问题描述
下面是构建实体:
@Entity
@Table(name = "build")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Build {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
@ManyToOne(
fetch = FetchType.EAGER,
cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name = "job_id", referencedColumnName = "id", nullable = false)
private Job job;
@Column(name = "build_url", nullable = false)
private String buildUrl;
@Column(name = "status")
private String status;
@Column(name = "name", nullable = false)
private String name;
}
下面是我与数据库执行事务的存储库:
public interface BuildRepository extends CrudRepository<Build, Integer> {
List<Build> findByStatus(@Param("status") String status);
@Transactional
@Modifying(flushAutomatically = true, clearAutomatically = true)
@Query(value = "update Build set status = ?2 where id = ?1")
void updateBuildStatus(int id, String status);
}
如果我必须获取特定 id 的条目,我可以在我的存储库中使用 findById()。
现在,我想根据 id、job 和 name 从表中获取条目。id、job 和 name 中至少有一个不为空。有人可以帮我构建可以处理这种情况的动态查询吗?
解决方案
感谢@yerlikayaoglu 的回复。通过将以下方法添加到我的存储库中解决了该问题:
@Query("select j FROM Build j where (:Id is null or j.id = :Id) and (:job is null or j.job = :job) and (:name is null or j.name = :name)")
List<Build> findByIdAndJobAndName(
@Param("Id") Integer Id,
@Param("Job") JenkinsJob Job,
@Param("Name") String Name);
这篇文章很有帮助:
推荐阅读
- php - 在php中无法访问关联数组
- java - 单击日历时如何在调度程序视图中获取资源
- swift - 如何在一系列问题的标签中显示下一个问题
- azure-devops - 一次所有构建和发布定义导出?
- mongodb - MongoDB 显示打开的连接过多
- kubernetes - IllegalStateException:找不到连接 1001 Kafka Kubernetes 的条目
- reactjs - 如何在另一个 redux 操作中检索有效负载
- sql - 学说查询 orderBy 查询中的用户总数
- ios - Snapkit 无法同时满足约束 make.edges.equalToSuperview()
- c# - 连接到其他 PC 上的 SQL Server