我在如何编写Join和从应用程序中选择时遇到问题
所以我必须实体应用程序和停用
deactivated有一个字段:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "application_id")
private Application application;
应用程序有:
@Id
private Long id;
我不知道如何用语言描述这个问题,所以我只粘贴wheJPQL:
在a.id=da.application_id WHERE da.filedeactivated=false上选择FROM applications a LEFT OUTER JOIN deactivated_applications da;
我收到参数的查询代码:
{ CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Application> cq = criteriaBuilder.createQuery(Application.class);
Root<Application> root = cq.from(Application.class);
//SearchQuery to TO SQLsearchQuery to specification, to Predicate
Predicate searchQueryPredicate = null;
if (!searchQuery.getCriteria().isEmpty())
searchQueryPredicate = SqlSearchQuery.of(searchQuery).toSpecification(Application.class).toPredicate(root, cq, criteriaBuilder);}
现在我需要在以前的SQL查询上运行这个查询
这看起来像是用子选择可以解决的问题。
要从应用程序中选择应用程序ID属于filedeactivated为false的停用应用程序,请使用以下类型的查询结构:
SELECT a FROM applications a WHERE a.Id MEMBER OF (SELECT b.application_id FROM deactivatedapplications b WHERE b.filedeactivated = false)
使用中的图书和作者示例描述了此方法https://thorben-janssen.com/jpql/#Subselects其中Thorben使用子选择来选择写过多本书的作者。