我创建了一个自定义存储库来覆盖持久性方法,并尝试将其连接起来,如春季文档中所述。我没有收到任何错误,启动时找到了所有实体和存储库,当我调用repo.saveAll(实体)时,持久性工作正常。但是,从不调用我的自定义代码。我已经添加了日志语句,甚至在我的代码中抛出了RuntimeExceptions,只是为了看看它是否正在执行,但它肯定被忽略了。我错过了哪一步?@Configuration@Profile("test")@EnableJpaRepositories(repositoryBaseClass = SetClientInfoRepositoryImpl.class, basePackages = {"gov.penndot.hwy.apras.common.repository" }, entityManagerFactoryRef = "serviceEntityManagerFactory", transactionManagerRef = "serviceTransactionManager")public class TestDatabaseConfig { @Bean(name = "serviceDataSource") public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.h2.Driver"); dataSource.setUrl("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1"); dataSource.setUsername("sa"); dataSource.setPassword("sa"); return dataSource; } @Bean public EntityManagerFactoryBuilder entityManagerFactoryBuilder() { return new EntityManagerFactoryBuilder(new HibernateJpaVendorAdapter(), new HashMap<String, Object>(), null); } @Bean(name = "serviceEntityManagerFactory") public LocalContainerEntityManagerFactoryBean serviceEntityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("serviceDataSource") DataSource dataSource) { return builder .dataSource(dataSource) .packages("stuff") .persistenceUnit("service") .build(); } @Bean(name = "serviceTransactionManager") public PlatformTransactionManager transactionManager( @Qualifier("serviceEntityManagerFactory") EntityManagerFactory serviceEntityManagerFactory) { return new JpaTransactionManager(serviceEntityManagerFactory); }
1 回答
慕丝7291255
TA贡献1859条经验 获得超6个赞
好吧,这是一个非常绝望的想法,但它可能值得一试......
创建自定义存储库接口:
public interface SetClientInfoRepository<T, ID> extends JpaRepository<T, ID> {
}通过自定义基本存储库实现此存储库接口:
public class SetClientInfoRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements SetClientInfoRepository<T, ID> {
}...最后,通过存储库接口而不是JpaRepository
通过这种方式,Spring必须从您的实现中创建存储库代理,因为它没有其他可以使用的类。此外,如果它由于任何原因无法创建存储库,您将在启动期间获得信息更丰富的异常。
使用自定义存储库接口本身并不是一件坏事,因为您以后总是很有可能想要向存储库添加一些常见的自定义方法,然后它会派上用场。
添加回答
举报
0/150
提交
取消
