相关疑难解决方法(0)

Spring Data JPA提取

有没有办法定义一个Spring数据规范(返回JPA谓词),其唯一目的是执行急切提取?

我有一个使用延迟加载定义各种关系的实体,但有几个查询我想要返回整个实体表示,包括所有相关集合,但这些查询的标准可能会有所不同.我已经看过一些帖子(例如在春季论坛上)讨论了fetch组的潜在引入,这可能是理想的解决方案; 但是,由于这还不是JPA规范的一部分,因此Spring Data不提供支持.

我正在寻找一种可重用的方法来对各种动态查询执行热切的提取.

例如,我考虑开发一种可重复使用的规范,其唯一目的是执行预先加载,并且可以与其他规范结合使用,例如:

private static Specification<MyEntity> eager() {

    return new Specification<MyEntity>() {

        @Override
        public Predicate toPredicate(Root<MyEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
            for (PluralAttribute<? super MyEntity, ?, ?> fetch : root.getModel().getPluralAttributes()) {
                root.fetch(fetch, JoinType.LEFT);
            }
            query.distinct(true);
            return null;
        }

    };
}
Run Code Online (Sandbox Code Playgroud)

此规范的目标是在各种查询中重用它,例如:

repository.findAll(where(eager()).and(otherCriteria).or(otherCriteria));
Run Code Online (Sandbox Code Playgroud)

但是,急切的获取规范并不是真正的谓词,因此它会返回null,并且NullPointerExceptions在与其他谓词链接时会引起明显的问题(即).

(请注意,单独使用此谓词可以按预期工作;即,以下查询将正确获取:)repository.findAll(eager());.

是否存在可以从"渴望"规范返回的适当的非null谓词,或者是否有任何其他可重用的方法可以使用Spring Data JPA规范触发急切的提取(无需将急切的负载添加到另一个规范上)?

jpa spring-data spring-data-jpa

8
推荐指数
1
解决办法
5318
查看次数

标签 统计

jpa ×1

spring-data ×1

spring-data-jpa ×1