Spring Data JPA Custom Repository

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Data JPA Custom Repository相关的知识,希望对你有一定的参考价值。

尝试使用Spring Data JPA实现自定义存储库时,我遇到了一些问题。

我尝试按照这样的一些参考指南,但我找不到问题:qazxsw poi

我不知道为什么Spring会尝试将自定义存储库方法作为我的实体属性进行查找。

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-implementations

实体:

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

服务:

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
}

自定义存储库Impl:

public interface MyCustomRepository {

    List<MyDTO> customFind(Long id);

}

当我运行应用程序时,我得到了PropertyReferenceException:

例外:

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;

    }
}
答案

它使用的实体和ID的类型,MyEntity和Long,在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) 的通用参数中指定。这就是您的自定义存储库应该使用的内容。所以你的JpaRepository应该使用MyEntity而不是MyDTO。

另一答案

我只是将类“MyCustomRepository”重命名为“MyRepositoryCustom”来解决问题。

现在工作正常! =)

以上是关于Spring Data JPA Custom Repository的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA - 带有“@Param Date”的自定义@Query 不起作用

带有 spring-security AuditorAware 的 spring-data-jpa 应用程序中的 ***Exception

集成Spring Data JPA

spring-data-jpa 和 spring-boot-starter-data-jpa 的区别

spring-data详解之spring-data-jpa:简单三步快速上手spring-data-jpa开发

spring data jpa怎么和solr整合