当前位置: 首页 > 知识库问答 >
问题:

Spring Data JPA@Query具有规范

太叔飞翰
2023-03-14
select * from test.SCH_FORUM_THREAD t
where exists (select 'x' from test.FORUM_THREAD_ACCESS fta, school.SCH_GROUP_PERSON gp
                where gp.GROUP_ID = fta.GROUP_ID
                and t.THREAD_ID = fta.THREAD_ID
                and gp.PERSON_ID = :personId)
    or exists (select 'x' from test.FORUM_THREAD_ACCESS fta
                where fta.THREAD_ID = t.THREAD_ID
                and fta.PERSON_ID = :personId);

现在挣扎着与first存在,因为它已经加入了。有没有办法用规范来做到这一点。也因为有两个存在,这是否意味着我需要两个规范。我能在一个规范中实现它吗。

共有1个答案

芮念
2023-03-14

我能够通过创建一个复杂的规范代码来解决它。类似于

@Override
public Predicate toPredicate(Root<ForumThread> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
            Subquery<ForumThread> subQuery = query.subquery(ForumThread.class);
            Root<ForumThread> subRoot = subQuery.from(ForumThread.class);
            Join<ForumThreadAccess, GroupPerson> fragpjoin = subRoot.join("groupPersons");
            Predicate threadPredicate = builder.equal(root.get("threadId"), subRoot.get("threadId"));
            Predicate personPredicate = builder.equal(fragpjoin.get("personId"), personId); 
            subQuery.select(subRoot).where(threadPredicate, personPredicate);


            Predicate existsGroupPredicate = builder.exists(subQuery);


            Subquery<ForumThreadAccess> subQuery1 = query.subquery(ForumThreadAccess.class);
            Root<ForumThreadAccess> subRoot1 = subQuery1.from(ForumThreadAccess.class);
            Predicate threadPredicate1 = builder.equal(root.get("threadId"), subRoot1.get("threadId"));     
            Predicate personPredicate1 = builder.equal(subRoot1.get("personId"), personId); 
            subQuery1.select(subRoot1).where(threadPredicate1, personPredicate1);


            Predicate existsPersonPredicate = builder.exists(subQuery1);

            return builder.or(existsGroupPredicate,existsPersonPredicate);


        }

要使其正常工作,您的实体还应该有适当的@OneTomany和@ManyTomany。

谢谢

 类似资料:
  • 我正在用查询构建一个存储库,该查询使用一个复杂的类型参数进行筛选,如下所示: 类是一个简单的POJO: null 谢了!

  • 我只想不使用xml,所以我需要非xml替代这些设置。这是我的POM。

  • 我是一个初学者,学习JPA,为了练习,我在这个问题上工作,我有两个实体班Person和Gym。 Person有:-id(自动生成)-name-age-gym(多对一映射) 在我的服务课上,这就是我正在做的

  • 我是流口水的新手,熟悉使用扩展关键字来继承规则。问题是有没有办法继承多个规则?这类似于在java类上使用多个接口。这是一个我希望它如何工作的示例,但我在规则3上遇到错误:

  • 我正在使用100个实体(使用JHipster)设置一个新的Spring Boot API,我的问题是:鉴于我有一组存储库层方法,我希望我的所有存储库都能够调用这些方法。 我已经尝试制作所有接口来扩展('RepositoryQuery'是我默认的自定义接口名称后缀),然后使用特定于实体的类。请注意,所有的类扩展了一个泛型实现类,名为。 请注意,给定正则表达式中的“.*”代表我的持久实体集中的任何实体

  • 我们希望将我们的swagger规范拆分为两个文件。一个包含endpoint,一个包含类型定义,因为类型定义用于多个项目,我们希望避免在多个源位置修复某些内容。 我们使用maven codegen插件来生成模型和api,它可以很好地进行拆分。 但是,请求验证不会,因为它无法遵循对它所显示的类型定义的外部引用。 我们使用swagger-request-validator-spring MVC进行请求验