Java 如何编写JPA条件查询使用联接选择

Java 如何编写JPA条件查询使用联接选择,java,hibernate,jpa,criteria-api,criteriaquery,Java,Hibernate,Jpa,Criteria Api,Criteriaquery,我遇到了一个关于如何编写连接而不是从应用程序中选择的问题 因此,我必须关闭应用程序并将其停用 有一个字段: @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "application_id") private Application application; 应用程序包括: @Id private Long id; 我不知道如何用文字来描述这个问题,所以我将只粘贴whe JPQL: 从a.id=da.applicat

我遇到了一个关于如何编写连接而不是从应用程序中选择的问题

因此,我必须关闭应用程序并将其停用

有一个字段:

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "application_id")
private Application application;
应用程序包括:

@Id
private Long id;
我不知道如何用文字来描述这个问题,所以我将只粘贴whe JPQL:

从a.id=da.application\u id上的左外部联接停用的应用程序da中选择一个应用程序,其中da.filedeactivated=false

我接收参数的查询的代码:

{    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);}
{CriteriaBuilder-CriteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery cq=criteriaBuilder.createQuery(Application.class);
Root=cq.from(Application.class);
//SearchQuery到SQLsearchQuery到规范,到谓词
谓词searchQueryPredicate=null;
如果(!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)

使用books and authors示例描述此方法,Thorben使用子选择来选择编写了多本书的作者。

很抱歉,标题太愚蠢了。我不知道如何要求只写查询,但不是使用数据库结构,而是使用java对象。问题是:我需要写这个,然后我还收到一个SearchQuery,它需要对第一个查询的结果进行分析。我能把2个查询组合成1个吗?比如:查询q2=entityManager.createNamedQuery(“Application.findWithFileActive”)查询q1=entityManager.createQuery(cq.where(searchQueryPredicate)),而不是q1.where(q2)?否。可以将其合并到单个查询中,也可以使用java过滤获取的数据。如果您想要动态创建的查询,那么请检查jpa标准。我正在为第一个查询使用标准,但无法从criteria Api获取第一个查询。我将用代码更新问题