【发布时间】:2017-08-31 11:04:13
【问题描述】:
我在将 JpaRepository 正确注入数据提供者时遇到问题。
我将@EnableJpaRepositories 注释放在位于包中的EpisodieApiApplication.class 中:
包 pl.hypeapp.episodie;
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = "pl.hypeapp.episodie.configuration")
@EnableAdminServer
@EnableJpaRepositories
public class EpisodieApiApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(EpisodieApiApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(EpisodieApiApplication.class);
}
}
DatabaseDataProviderConfiguration.class 位于包中
包pl.hypeapp.episodie.configuration.dataprovider;
@Configuration
public class DatabaseDataProviderConfiguration {
@Bean
public TvShowDatabaseProvider tvShowDatabaseProvider(TvShowRepository tvShowRepository) {
return new TvShowDatabaseProvider(tvShowRepository);
}
}
包 pl.hypeapp.episodie.dataproviders.database;
public interface TvShowRepository extends JpaRepository<TvShow, String> {
}
我的databaseprovider在模块application/dataproviders/database DatabaseDataProvider.class
public class TvShowDatabaseProvider implements DoesTvShowExist, GetTvShowFromDatabase, InsertTvShowToDatabase {
private final TvShowRepository tvShowRepository;
public TvShowDatabaseProvider(TvShowRepository tvShowRepository) {
this.tvShowRepository = tvShowRepository;
}
}
TvShow.class 位于包中:
包 pl.hypeapp.core.entity.tvmaze;
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
@Entity
public class TvShow {
@JsonProperty("id")
public Integer id;
}
但是我收到了这个错误:
在类路径资源 [pl/hypeapp/episodie/configuration/dataprovider/DatabaseDataProviderConfiguration.class] 中定义名称为 'tvShowDatabaseProvider' 的 bean 创建错误:通过方法 'tvShowDatabaseProvider' 参数 0 表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“tvShowRepository”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException: Not a managed type: class pl.hypeapp.core.entity.tvmaze.TvShow
github 的完整代码,但不完整,可能由于缺少类而无法工作
【问题讨论】:
-
表示它不了解您的实体。使用
@EnableJpaRepositories时是否设置了基础包?如果您的实体不在@Application的子包中,您可能需要使用@EntityScan -
您也可以发布
SpiringApplication课程的代码吗?另外,向我们展示这些类的包名称,例如TvShowRepository -
@javaguy 我编辑了问题。你现在可以看。
标签: java spring jpa spring-boot spring-data