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获取第一个查询。我将用代码更新问题