Java – a common JPA repository for multiple entities

I have several entities and use the spring data JPA repository and specifications to query my database Therefore, I created a generic class specbuilder to build my query based on my query descriptor

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...
        }
      }
    };
  }
}

My Repository:

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

and

public interface Entity2DAO extends Repository<Entity2,JpaSpecificationExecutor {
}

Now I have three things I'm not sure: 1) is the use of this general specbuilder clean?

2) Is there any way to avoid writing those repository interfaces for each entity? Let's talk about a common repository?

3) The myquerydescriptor class has a method that returns an entity instance that will be queried What is a concise method to obtain the corresponding repository based on entity classes to avoid switching cases? I'm considering adding annotations with specific repository classes to each entity, but it feels a little smelly I should create a factory and inject a map

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

Solution

You can use entity inheritance and spring expression language (spiel) to make repository problem calls on the correct entity Just like I updated here last time

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>