Spring Hibernate不会从接口

时间:2017-07-26 01:13:12

标签: spring spring-boot spring-data-jpa

我有两个独立的项目。一个项目在org.patrick.application中包含我的应用程序逻辑和控制器,一个单独的项目包含我的Hibernate实体,Dao和org.patrick.hibernate中的模型。我的问题是Spring不会为我的CrudRepository实例化一个实现类。

以下是我的应用程序项目中的Application.java类注释:

package org.patrick.application;

@SpringBootApplication
@Configuration
@EnableAutoConfiguration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = { "org.patrick.hibernate" })
@EntityScan(basePackages = { "org.patrick.hibernate" })
@ComponentScan(basePackages = { "org.patrick.hibernate", "org.patrick.application" })

这些注释应该扫描我的第二个Hibernate项目以获取所有Hibernate对象。

我的Hibernate存储库如下所示:

package org.patrick.hibernate;

@Repository
public interface PatrickDao extends CrudRepository<MyModel, Long>

此存储库没有类实现。我期待Spring为我填充这个实现。

现在,在我的应用程序org.patrick.application内,我试图像这样使用Dao:

package org.patrick.application;

@Autowired
private PatrickDao patrickDao;

由于以下错误,导致我的Application项目无法启动:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [org.patrick.hibernate.PatrickDao]: expected at least 1 bean which qualifies as autowire candidate.

我知道核心问题是Spring没有实现这个接口 -  因为如果我在PatrickDaoImpl包中提供我自己的org.patrick.hibernate,那么Application项目就会正常启动。这让我感到困惑,因为我在Application.java类上有正确的注释,但由于某种原因,Spring无法实现存储库。

为了让Spring为我的Repository接口实现类,我还需要做些什么吗?在以前的测试中,如果所有内容都在同一个包中,则此行为有效。

1 个答案:

答案 0 :(得分:0)

我发现了问题。对于这个特定的模型,定义如下:

package org.patrick.hibernate;

public class MyModel implements Serializable {}

此模型没有@Entity注释。如果缺少这个注释,那么Spring将不会警告为什么它不能实现存储库接口。就我而言,它只是抛出NoSuchBeanDefinitionException例外。

我使用正确的注释更新了我的模型:

package org.patrick.hibernate;

@Entity
public class MyModel implements Serializable {}