Можно ли создать общий интерфейс JpaRepository? - PullRequest
0 голосов
/ 15 октября 2018

Я создал такой интерфейс,

@Repository
public interface IJpaRepositoryCustom<T> extends JpaRepository<T,Long>{
}

И класс обслуживания

@Service
public class LOVService<T>{
    @Autowired
    private IJpaRepositoryCustom<T> jpaRepositoryCustom;
}

Но с помощью приведенного выше кода я получаю исключение

SEVERE [ContainerBackgroundProcessor [StandardEngine [Catalina]]] org.apache.catalina.core.factory.BeanCreationException: Ошибка при создании компонента с именем 'IJpaRepositoryCustom': сбой вызова метода init;вложенное исключение - java.lang.IllegalArgumentException: неуправляемый тип: класс java.lang.Object в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCaporyBeaf.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:573) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:495) в org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0(AbstractBeanFactory.java:317)

Есть ли другой способ создания общего репозитория JPA?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Когда мы хотим добавить пользовательские методы во все репозитории Spring Data JPA, первое, что нам нужно, это создать базовый интерфейс, который объявляет пользовательские методы.

1) Первый шаг:Создание базового интерфейса

    //Annotation to exclude repository interfaces from being picked up and thus in consequence getting an instance being created.
@NoRepositoryBean  
public interface ReadOnlyRepository<T, ID extends Serializable> extends Repository<T, ID> {

    T findOne(ID id);

    List<T> findAll();

}

2) Второй шаг: реализация базового интерфейса репозитория

public interface IUserReadOnlyRepository extends ReadOnlyRepository<User,Integer> 

{
    User findById(Integer id);

    List<User> findByName(String name);

    @Query("select u from MyUser u where u.name = ?1")
    List<User> findUserByAttributeAndValueCustomQuery(String string2);   
}

3) Третий шаг: только автопроводв контроллер / RESTController

  @RestController
    @RequestMapping("/user")
    @CrossOrigin
    //@EnableTransactionManagement
    public class UserController {

        @Autowired
        private IUserReadOnlyRepository userReadOnlyRepository;

    @RequestMapping(value = "/getUserByIdReadOnlyRepository/{id}")
    public @ResponseBody User getUserById(@PathVariable Integer id)
    { 
        User user = userReadOnlyRepository.findById(id);
        return user;

    }

Примечание: это прекрасно работает для меня !.Если требуется какая-либо помощь, пинг мне.

0 голосов
/ 15 октября 2018

Вы можете редактировать свой сервис следующим образом:

@Service
public class LOVService{

    @Autowired
    private IJpaRepositoryCustom jpaRepositoryCustom;
}

И ваш репозиторий:

@Repository
public interface IJpaRepositoryCustom extends JpaRepository<YourEntityClass,Long>{
}

И нет необходимости передавать аргумент в хранилище, если вы подключаетесь автоматическиэтот.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...