为了账号安全,请及时绑定邮箱和手机立即绑定

春季 JPA 基本存储库

春季 JPA 基本存储库

慕工程0101907 2022-08-03 15:36:09
我创建了一个自定义存储库来覆盖持久性方法,并尝试将其连接起来,如春季文档中所述。我没有收到任何错误,启动时找到了所有实体和存储库,当我调用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必须从您的实现中创建存储库代理,因为它没有其他可以使用的类。此外,如果它由于任何原因无法创建存储库,您将在启动期间获得信息更丰富的异常。

使用自定义存储库接口本身并不是一件坏事,因为您以后总是很有可能想要向存储库添加一些常见的自定义方法,然后它会派上用场。


查看完整回答
反对 回复 2022-08-03
  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号