春季 JPA 基本存储库

我创建了一个自定义存储库来覆盖持久性方法,并尝试将其连接起来,如春季文档中所述。我没有收到任何错误,启动时找到了所有实体和存储库,当我调用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);

    }


慕工程0101907
浏览 138回答 1
1回答

慕丝7291255

好吧,这是一个非常绝望的想法,但它可能值得一试......创建自定义存储库接口:public&nbsp;interface&nbsp;SetClientInfoRepository<T,&nbsp;ID>&nbsp;extends&nbsp;JpaRepository<T,&nbsp;ID>&nbsp;{ }通过自定义基本存储库实现此存储库接口:public&nbsp;class&nbsp;SetClientInfoRepositoryImpl<T,&nbsp;ID&nbsp;extends&nbsp;Serializable>&nbsp;extends&nbsp;SimpleJpaRepository<T,&nbsp;ID>&nbsp;implements&nbsp;SetClientInfoRepository<T,&nbsp;ID>&nbsp;{ }...最后,通过存储库接口而不是JpaRepository通过这种方式,Spring必须从您的实现中创建存储库代理,因为它没有其他可以使用的类。此外,如果它由于任何原因无法创建存储库,您将在启动期间获得信息更丰富的异常。使用自定义存储库接口本身并不是一件坏事,因为您以后总是很有可能想要向存储库添加一些常见的自定义方法,然后它会派上用场。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java