慕工程0101907
2022-08-03 15:36:09
我創(chuàng)建了一個(gè)自定義存儲(chǔ)庫來覆蓋持久性方法,并嘗試將其連接起來,如春季文檔中所述。我沒有收到任何錯(cuò)誤,啟動(dòng)時(shí)找到了所有實(shí)體和存儲(chǔ)庫,當(dāng)我調(diào)用repo.saveAll(實(shí)體)時(shí),持久性工作正常。但是,從不調(diào)用我的自定義代碼。我已經(jīng)添加了日志語句,甚至在我的代碼中拋出了RuntimeExceptions,只是為了看看它是否正在執(zhí)行,但它肯定被忽略了。我錯(cuò)過了哪一步?@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貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
好吧,這是一個(gè)非常絕望的想法,但它可能值得一試......
創(chuàng)建自定義存儲(chǔ)庫接口:
public interface SetClientInfoRepository<T, ID> extends JpaRepository<T, ID> { }
通過自定義基本存儲(chǔ)庫實(shí)現(xiàn)此存儲(chǔ)庫接口:
public class SetClientInfoRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements SetClientInfoRepository<T, ID> { }
...最后,通過存儲(chǔ)庫接口而不是JpaRepository
通過這種方式,Spring必須從您的實(shí)現(xiàn)中創(chuàng)建存儲(chǔ)庫代理,因?yàn)樗鼪]有其他可以使用的類。此外,如果它由于任何原因無法創(chuàng)建存儲(chǔ)庫,您將在啟動(dòng)期間獲得信息更豐富的異常。
使用自定義存儲(chǔ)庫接口本身并不是一件壞事,因?yàn)槟院罂偸呛苡锌赡芟胍虼鎯?chǔ)庫添加一些常見的自定義方法,然后它會(huì)派上用場(chǎng)。
添加回答
舉報(bào)
0/150
提交
取消