【发布时间】:2019-08-06 22:36:56
【问题描述】:
我的 Spring Boot 应用程序中有一个 Table 和 Pojo,如下所示。
@Entity
@Table(name = "attendance_summary")
public class AttendanceSummary implements Serializable {
@Id
@SequenceGenerator(name = "attendance_summary_id_seq",
sequenceName = "attendance_summary_id_seq",
allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "attendance_summary_id_seq")
@Column(name = "id", updatable = false)
public Integer id;
@Column(name = "emp_id", nullable = false)
public Integer empId;
@Column(name = "designation_id")
public Integer designationId;
@Column(name = "designation_category_id")
public Integer designationCategoryId;
@Column(name = "department_id")
public Integer departmentId;
......
}
现在我想为这些字段提供动态输入。意味着用户可能会选择 empIds、designationIds.... 或它们的任何组合,甚至没有它们的列表。 如果他们没有选择任何字段,我需要从数据库中的表中返回所有行。
但是在 jpa 中,当我们在存储库中编写方法时,我们必须指定字段名称,例如
public interface AttendanceSummaryRepository extends JpaRepository<Integer,AttendanceSummary>{
List<AttendanceSummary> findByEmpIdAndDesignationId....(List<Integer> empIdList,List<Integer> designationIdList ... );
}
这意味着如果这些参数中的任何一个为空,我将收到错误或异常,因此我会丢失一些数据。
在 PHP 或类似的其他语言中,我可以检查所需过滤器的值,并在查询中动态添加 where 子句。
query= "Select * from attendance_summary where ";
if(empIdList != null)
query = query + " emp_id in empIdList "
if(designationIdList != null)
query = query + " designation_id in designationIdList "
.....
//You get the idea.
有没有办法用 jpaDataMethods 做到这一点,如果是的话怎么做。非常感谢任何详细的解释/资源链接。
抱歉英语不好,如果我不能正确解释我的问题。
【问题讨论】:
标签: java spring spring-boot jpa