使用spring和@querydsl predicate 时url中的查询语法

sqxo8psd  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(283)

如何编写http请求url以获得类似以下内容的查询:

  1. select *
  2. from incidents i,
  3. jira_issues ji
  4. where i.incident_id = ji.incident_id
  5. and ji.external_jira_issue_id = 'ABC-123'
  6. and ji.jira_server_id = '1'

我有以下课程:

  1. @Entity(name = "incidents")
  2. public class IncidentEntity {
  3. @OneToMany(
  4. mappedBy = "incident",
  5. cascade = CascadeType.ALL
  6. )
  7. @LazyCollection(LazyCollectionOption.FALSE)
  8. private List<JiraIssueEntity> jiraIssues;
  9. ...
  10. }
  1. @Entity(name = "jira_issues")
  2. public class JiraIssueEntity {
  3. @EmbeddedId
  4. @EqualsAndHashCode.Include
  5. private JiraIssueId id;
  6. @ManyToOne(fetch = FetchType.LAZY)
  7. @JoinColumn(name = "incident_id")
  8. @ToString.Exclude
  9. private IncidentEntity incident;
  10. ...
  11. }
  1. @Embeddable
  2. public class JiraIssueId implements Serializable {
  3. @EqualsAndHashCode.Include
  4. private String externalJiraIssueId;
  5. @EqualsAndHashCode.Include
  6. private String jiraServerId;
  7. }

这是我的api方法签名:

  1. @GetMapping("")
  2. public Page<Incident> listIncidents(
  3. @QuerydslPredicate(root = IncidentEntity.class) Predicate predicate
  4. );

我知道我可以寄一些东西,比如:

  1. /incidents/?jiraIssues.id.externalJiraIssueId=ABC-123&jiraIssues.id.jiraServerId=1"

这将转换为以下查询:

  1. select *
  2. from incidents incidenten0_
  3. where (exists(select 1
  4. from jira_issues jiraissues1_
  5. where incidenten0_.incident_id = jiraissues1_.incident_id
  6. and (lower(jiraissues1_.external_jira_issue_id) like ? escape '!')))
  7. and (exists(select 1
  8. from jira_issues jiraissues2_
  9. where incidenten0_.incident_id = jiraissues2_.incident_id
  10. and (lower(jiraissues2_.jira_server_id) like ? escape '!')))

这不太好。
我不知道如何:
do equals和not contains(externaljiraissueid=-1234的行也将返回,但我不希望返回)。
检查相同的jiraissue是否有externaljiraissueid=-123和jiraissues.id.jiraserverid=1,并且没有不同的jiraissues,每个jiraissues都匹配一个(类似jiraissues.id=(-123,1)
谢谢您。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题