我目前正在使用Spring Boot和Spring Data JPA连接Oracle数据库。对于一个参数,我只需使用Spring Repository findById(Long id);
,它非常好用。然而,对于搜索功能,我觉得更加复杂。在我们的情况下,用户提供了一个嵌套的JSON对象,其中包含多个可选的搜索参数(此时我无法更改他们发送数据的方式,必须通过嵌套的JSON)。以下是JSON输入对象的样式:
{
"agent_filter": {
"first_name": "string",
"last_name": "string",
"agentNumber": "string",
"agentCode": "string"
},
"account": "string",
"status": "string",
"paid": "string",
"amount": "string",
"person_filter": {
"date_of_birth": "string",
"first_name": "string",
"last_name": "string",
"tax_id": "string"
}
}
所有的搜索条件都是可选的(至少需要1个参数)
在后端,我们有以下实体:
@Entity
Account{
@OneToMany
List<PersonRole> role;
@OneToMany
List<AgentRole> role;
}
@Entity
PersonRole{
String role;
Person person;
}
@Entity
AgentRole{
String role;
Agent agent;
}
@Entity
Person{...}
@Entity
Agent{...}
为了提供搜索功能,我可以进行多个连接。我开始使用带有@Query注释的JPQL,但是必须对每个参数进行"is null or"检查,这很混乱。我开始研究其他选项,看到了关于QueryDSL、criteria和specification的内容,但不确定应该专注学习哪一个。不幸的是,我对这个主题并不了解太多,希望有人能指点我实现这个搜索的正确方向。谢谢!