Spring数据和Querydsl的通用代码失败了

时间:2014-11-21 06:19:46

标签: spring hibernate spring-data querydsl

我使用querydsl这就是为什么我不需要像findByName()这样的方法,而且我的所有存储库接口都是空的。

所以我尝试制作genric代码以避免重复使用空方法,因为我在hibernate映射的实体中有很多类。

public interface GenericResposotory<T> 
              extends JpaRepository<T, Integer>, QueryDslPredicateExecutor<T> {

}

当我运行我的服务器时,我收到此错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericResposotory': 
Invocation of init method failed; nested exception is 
java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object

还有一种方法可以像我尝试那样制作通用存储库吗?

2 个答案:

答案 0 :(得分:2)

Spring数据尝试为您创建的扩展JpaRepository的所有接口创建bean。如果您想拥有一种不会被使用的基础存储库,请使用@NoRepositoryBean

标记您的界面

答案 1 :(得分:0)

Repository是spring的标记接口,它有助于找到您自己的扩展存储库并通过提取实体的类型来创建存储库。我们可以在RepositoryFactorySupport中看到:

  

工厂bean用于创建给定存储库接口的实例。   创建实现已配置的*存储库接口的代理   并将控制权交给上述人员   QueryExecuterMethodInterceptor。查询*检测策略即可   通过设置QueryLookupStrategy.Key进行配置。

这就是为什么我认为你无法直接创建通用存储库。

但您可以尝试使用RepositoryFactorySupport(已实施JpaRepositoryFactory)来生成存储库并手动将其置于上下文中。

此外,您可以通过将存储库定义为内部接口来减少项目和命名空间污染中的文件数量:只需添加一个属性,如下所示:

<jpa:repositories base-package="com.pack" consider-nested-repositories="true"/>