Получить репозиторий для сущности

У меня есть такие объекты, как:

@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);
}

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

    @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-Метод?


person Jonas Wolff    schedule 08.05.2019    source источник
comment
Почему бы не использовать инъекцию зависимостей для получения этого экземпляра, например. @Autowired private BookRepository bookRepository;   -  person AbhishekB    schedule 08.05.2019


Ответы (1)


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

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

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

person Lesiak    schedule 08.05.2019
comment
Спасибо большое за вашу помощь. Решение очень простое. Очевидно, я был охрененным баблом ума :( - person Jonas Wolff; 08.05.2019
comment
Если вас устраивает ответ, подумайте о том, чтобы принять его. - person Lesiak; 08.05.2019