Пользовательский репозиторий Spring Data JPA - PullRequest
0 голосов
/ 26 апреля 2018

У меня возникают некоторые проблемы при попытке реализовать пользовательские репозитории с помощью Spring Data JPA.

Я пытаюсь следовать некоторым справочным руководствам, как это, но я не могу найти проблему: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-implementations

Я не знаю, почему Spring пытается найти пользовательский метод репозитория как свойство моего объекта.

spring-boot-starter-data-jpa => 1.5.11.RELEASE

Entity:

public class MyEntity {

    private Integer id
    private String name;

    // Getter/Setters...
}

Служба:

@Service
public class MyServiceImpl implements MyService {


    @Autowired
    private MyRepository repository;

    //...

    public MyDTO customFind(Long id){


        return repository.customFind(id);
    }
}

Репозиторий:

@Repository
public interface MyRepository extends JpaRepository<MyEntity, Long>, QueryDslPredicateExecutor<MyEntity>, MyCustomRepository {

    //no-op
}

Пользовательский репозиторий:

public interface MyCustomRepository {

    List<MyDTO> customFind(Long id);

}

Пользовательский репозиторий Impl:

public class MyCustomRepositoryImpl implements MyCustomRepository {


    @Autowired
    private EntityManager entityManager;


    public List<MyDTO> customFind(Long id){


        JPAQuery<EmpregadoEntity> query = new JPAQuery<>(entityManager);
        MyDTO myDTO = query...  //... JPA query return MyDTO

        return myDTO;

    }
}

Когда я запускаю приложение, я получаю PropertyReferenceException:

Исключение:

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property customFind found for type MyEntity!
    at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:79)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:335)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:311)
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:274)
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:245)
    at org.springframework.data.repository.query.parser.Part.<init>(Part.java:76)
    at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:247)
    at org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:398)
    at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:378)
    at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:86)
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:70)

Ответы [ 2 ]

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

Я просто переименую класс «MyCustomRepository» в «MyRepositoryCustom», чтобы исправить проблему.

Теперь работает отлично!=)

0 голосов
/ 26 апреля 2018

Тип сущности и идентификатор, с которым он работает, MyEntity и Long, указаны в общих параметрах JpaRepository.Именно с этим должен работать ваш пользовательский репозиторий.Таким образом, ваш MyCustomRepositoryImpl должен использовать MyEntity вместо MyDTO .

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