Spring Hibernate不会从接口实现存储库类



我有两个独立的项目。一个项目包含我的应用程序逻辑和控制器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 对象。

我的休眠存储库如下所示:

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;

这导致我的应用程序项目由于以下错误而无法启动:

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 没有实现这个接口—— 因为如果我在org.patrick.hibernate包中提供自己的PatrickDaoImpl,那么应用程序项目将正常启动。这让我感到困惑,因为我在Application.java类上有正确的注释,但由于某种原因,Spring无法实现存储库。

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

我发现了问题。对于此特定模型,定义如下所示:

package org.patrick.hibernate;
public class MyModel implements Serializable {}

此模型没有@Entity注释。如果缺少此注释,则 Spring 不会给出任何警告,说明为什么它无法实现存储库接口。就我而言,它只是抛出了NoSuchBeanDefinitionException异常。

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

package org.patrick.hibernate;
@Entity
public class MyModel implements Serializable {}

最新更新