加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 多个实体的通用JPA存储库

发布时间:2020-12-15 02:10:17 所属栏目:Java 来源:网络整理
导读:我有几个实体并使用 Spring Data JPA存储库和 specifications查询我的数据库.因此,我创建了一个泛型类SpecBuilder,以基于查询描述(MyQueryDescriptor)构建我的查询. public class Specs { public static T extends MyEntityIFace SpecificationT myfind(fina
我有几个实体并使用 Spring Data JPA存储库和 specifications查询我的数据库.因此,我创建了一个泛型类SpecBuilder,以基于查询描述(MyQueryDescriptor)构建我的查询.

public class Specs {
  public static <T extends MyEntityIFace> Specification<T> myfind(final MyQueryDescriptor qDesc) {
    return new Specification<T>() {
      @Override
      public Predicate toPredicate(Root<T> root,CriteriaQuery<?> criteriaQuery,CriteriaBuilder criteriaBuilder) {
        try {
          return SpecBuilder.mySpec(root,criteriaQuery,criteriaBuilder,qDesc);
        } catch (Exception e) {
          ...handle error...
        }
      }
    };
  }
}

我的存储库:

public interface Entity1DAO extends Repository<Entity1,Long>,JpaSpecificationExecutor {
}

public interface Entity2DAO extends Repository<Entity2,JpaSpecificationExecutor {
}

现在我有三件事我不太确定:
1)
这种通用SpecBuilder的使用是否干净?

2)
有没有办法避免为每个实体编写那些存储库接口?让我们说一个通用的存储库?

3)
MyQueryDescriptor类有一个返回实体实例的方法,该实例将被查询.
什么是基于实体类获取相应存储库的简洁方法,避免切换案例?我正在考虑将具有特定存储库类的注释添加到每个实体,但感觉有点臭.
我应该创建一个工厂并注入一个地图

Entity1.class => Entity1DAO
Entity2.class => Entity2DAO

解决方法

您可以使用实体继承并使用 Spring Expression Language(SpEL)在正确的实体上进行存储库问题调用.就像我上次更新 here一样

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读