Получить репозиторий для сущности - PullRequest
0 голосов
/ 08 мая 2019

У меня есть такие сущности, как:

@Entity
public class Book  extends AbstractPersistable {
 // some fields
}

и хранилища, такие как:

@Repository
public interface BookRepository extends JpaRepository<Book, Long>, QuerydslPredicateExecutor<Book> {
    Collection<Book> findByAuthorsContains(Author author);

    Collection<Book> findByShelf(Shelf shelf);

    Optional<Book> findByTitle(String title);
}

Теперь я хочу получить хранилище одной сущности, чтобы найти сущность по ID. Но я не знаю, как я могу получить экземпляр, например, BookRepository. Я создал следующие методы:

    @Override
public Collection<.datatransfer.graphql.Field> getFieldOfEntity(String entity, Long id) {
    Class<? extends AbstractPersistable> entityClass = getClassesOfTransferDataTypes().stream()
            .filter(aClass -> aClass.getSimpleName().equals(entity))
            .findFirst()
            .orElse(null);
    if (entityClass != null) {
        JpaRepository repository = getClassRepositoryOfEntity(entityClass);
        Object one = repository.getOne(id);
        return createFields(one);
    }
    return null;
}

private JpaRepository getClassRepositoryOfEntity(Class<? extends AbstractPersistable> entityClass) {
    Set<datatransfer.graphql.Field> fields = new HashSet<>();
    // TODO get Repository for entityClass
    return null;
}

private Collection<datatransfer.graphql.Field> createFields(Object o) {
    // TODO transform o in a list of Fields
    return null;
}

Поле:

public class Field {
    public String type;         // String or Integer
    public String fieldName;    // title of field
    public String title;        // annotated Title
    public String value;        // value of entity.field
}

Может кто-нибудь помочь мне заполнить getClassRepositoryOfEntity -метод?

1 Ответ

0 голосов
/ 08 мая 2019

Мое предложение: используйте entityManager напрямую. Вы можете найти сущность любого класса.

https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#find-java.lang.Class-java.lang.Object-

Если вы уверены, что вам нужно через репозиторий Spring, посмотрите на Как получить экземпляр репозитория данных Spring для данного класса домена?

...