多个实体的通用 JPA 存储库

Tob*_*obi 5 java spring jpa spring-data

我有几个实体,并使用Spring Data JPA存储库和规范查询我的数据库。因此,我创建了一个通用类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...
        }
      }
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

我的存储库:

public interface Entity1DAO extends Repository<Entity1,Long>, 
                                    JpaSpecificationExecutor {
}
Run Code Online (Sandbox Code Playgroud)

public interface Entity2DAO extends Repository<Entity2,Long>, 
                                    JpaSpecificationExecutor {
}
Run Code Online (Sandbox Code Playgroud)

现在有 3 件事我不太确定:
1)
使用通用 SpecBuilder 是一个干净的设计吗?

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

3)
所述的MyQueryDescriptor类必须返回一个实体,这将被查询的实例的方法。
什么是基于实体类获取相应存储库的干净方法,避免切换案例?我正在考虑为每个实体添加一个带有特定存储库类的注释,但感觉有点臭。
我应该创建一个工厂并注入一个像

Entity1.class => Entity1DAO
Entity2.class => Entity2DAO
Run Code Online (Sandbox Code Playgroud)

?

asm*_*dey 2

您可以使用实体继承并使用Spring 表达式语言(SpEL) 对正确的实体进行存储库问题调用。就像我上次更新这里一样