java - 从jpa中的数据源中截断表多个数据源不起作用
问题描述
当有多个数据源配置时,我试图用 jpa 截断一个表,该命令似乎已提交,但实际上 - 表中的数据仍然存在并且没有被删除。
我的代码片段如下:
相关数据源配置
@Configuration
@EnableJpaRepositories(basePackages = "com.haaretz.jobs.newsletter_preferences_job.data.newsletter_alerts")
public class NewsletterAlertsConfig {
private Environment environment;
@Autowired
public NewsletterAlertsConfig(Environment environment){
this.environment = environment;
}
@Primary
@Bean(name = "newsletterAlertsDataSource")
public DataSource newsletterAlertsDataSource() {
return DataSourceBuilder
.create()
.driverClassName(environment.getProperty("datasource.newsletterAlerts.driverClassName"))
.url(environment.getProperty("datasource.newsletterAlerts.jdbcUrl"))
.username(environment.getProperty("datasource.newsletterAlerts.username"))
.password(environment.getProperty("datasource.newsletterAlerts.password"))
.build();
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("newsletterAlertsDataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.haaretz.jobs.newsletter_preferences_job.data.newsletter_alerts")
.persistenceUnit("newsletterAlerts")
.build();
}
}
配置的第二个数据源
@Configuration
@EnableJpaRepositories(basePackages = "com.haaretz.jobs.newsletter_preferences_job.data.gstat",
entityManagerFactoryRef = "gstatEntityManagerFactory")
public class GstatConfig {
private Environment environment;
@Autowired
public GstatConfig(Environment environment){
this.environment = environment;
}
@Bean(name = "gstatDataSource")
public DataSource gstatDataSource() {
return DataSourceBuilder
.create()
.driverClassName(environment.getProperty("datasource.gstat.driverClassName"))
.url(environment.getProperty("datasource.gstat.jdbcUrl"))
.username(environment.getProperty("datasource.gstat.username"))
.password(environment.getProperty("datasource.gstat.password"))
.build();
}
@Bean(name = "gstatEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean gstatEntityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("gstatDataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.haaretz.jobs.newsletter_preferences_job.data.gstat")
.persistenceUnit("gstat")
.build();
}
}
存储库
@Repository
public interface NewsletterAlertsRepository extends CrudRepository<NewsletterOpPersonalNl, String> {
@Modifying
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Query(
value = "truncate table OP_PERSONAL_NL",
nativeQuery = true
)
void truncate();
}
激活删除的作业
@Component
public class NewsletterPreferencesJob {
private NewsletterAlertsRepository newsletterAlertsRepository;
@Autowired
public NewsletterPreferencesJob(NewsletterAlertsRepository newsletterAlertsRepository) {
this.newsletterAlertsRepository = newsletterAlertsRepository;
}
@Transactional
public void doTask() {
newsletterAlertsRepository.truncate();
}
}
我还尝试使用 crudRepoditory 默认函数,它返回相同的结果(已提交但未实际删除):
newsletterAlertsRepository.deleteAll();
或使用事务管理器,它实际上也不会删除数据
TransactionTemplate transactionTemplate = new TransactionTemplate(platformTransactionManager);
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
entityManager.createNativeQuery("truncate table OP_PERSONAL_NL").executeUpdate();
}
});
解决方案
推荐阅读
- php - 使用 INNODB 5.6.42-84.2 在 PHP 中创建事务
- c# - MongoDb C# 用正则表达式查找?
- r - 加载 devtools 库时出现错误命名空间
- imagemagick - 如何将 PNG 图像(特别是灰度图像)转换为索引颜色
- microsoft-graph-api - 调用 /events/ 返回错误:“此操作不支持绑定到非日历文件夹。”
- python-3.x - wtf-forms populate.object AttributeError:“加热电路”对象在编辑数据库条目时没有属性“翻译”
- javascript - 逐列展开:按多列展开行,根据点击的列加载不同的组件
- django - chrome 扩展从网站获取会话数据
- swift - Cocoa Swift:子视图不使用超级视图调整大小
- python - 如何覆盖 Python 的“str”以使其返回大写值?