【问题标题】:Generic Dao with Spring data带有 Spring 数据的通用 Dao
【发布时间】:2019-09-18 08:03:33
【问题描述】:

我在 Spring Boot 项目中使用 Spring Data Repositories 和自定义 Repositories,但我想为海关添加 Generic Repository。

这是GenericCustomRepositoy

public interface GenericCustomRepositoy<T, ID> {

    List<T> findByFields(Class<T> clazz, List<Pair<String, Object>> fieldValue, List<Pair<String, Boolean>> orderBy);
}
@Repository
public class GenericCustomRepositoyImpl<T, ID> implements GenericCustomRepositoy<T, ID> {

    @PersistenceContext
    protected EntityManager em;

    public List<T> findByFields(Class<T> clazz, List<Pair<String, Object>> fieldValues, List<Pair<String, Boolean>> orderBy) {

        final CriteriaBuilder cb = em.getCriteriaBuilder();
        final CriteriaQuery<T> cq = cb.createQuery(clazz);
        final Root<T> root = cq.from(clazz);

        ........................

        return em.createQuery(cq).getResultList();
    }

这是我的仓库:

@Repository
public interface AdresseLivraisonRepository extends JpaRepository<AddressEntity, Integer>, GenericCustomRepositoy<AddressEntity, Integer> {

}

当我不想运行应用程序时出现此异常:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adresseLivraisonRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property fields found for type AddressEntity!
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)

我做错了什么!

我更改了我的代码并添加了一个扩展通用的自定义存储库,但我得到了相同的异常。

这是新的存储库:

@Repository
public interface AdresseLivraisonRepository extends JpaRepository<ForwardingAddressEntity, Integer>, AdresseLivraisonCustomRepository {

}

【问题讨论】:

    标签: spring-boot spring-data-jpa


    【解决方案1】:

    自定义查询方法的名称遵循 Spring Data JPA 存储库的命名约定。所以 Spring Data JPA 在启动时会尝试为它生成一个查询方法。

    尝试将您的方法重命名为其他名称,例如 genericFindByFields(...)

    【讨论】:

      【解决方案2】:

      好吧,我通过 Spring Data JpaSpecificationExecutor 更改了我的泛型类,它完成了我想要对泛型执行的操作Advanced Spring Data JPA - Specifications and Querydsl

      【讨论】:

        猜你喜欢
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 2018-01-10
        • 2012-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-04
        相关资源
        最近更新 更多