【发布时间】:2021-08-31 23:19:34
【问题描述】:
我们正在使用 Hibernate 和 Spring Batch 将数据从一个数据库迁移到另一个数据库。下面的例子有点伪装。
因此,我们使用的是标准处理管道:
return jobBuilderFactory.get("migrateAll")
.incrementer(new RunIdIncrementer())
.listener(listener)
.flow(DConfiguration.migrateD())
和migrateD包括三个步骤:
@Bean(name="migrateDsStep")
public Step migrateDs() {
return stepBuilderFactory.get("migrateDs")
.<org.h2.D, org.mssql.D> chunk(100)
.reader(dReader())
.processor(dItemProcessor)
.writer(dWriter())
.listener(chunkLogger)
.build();
现在假设该表与另一个表具有多对多关系。我怎么能坚持呢?我的所有实体基本上都有一个 JPA 实体类,并将它们填充到处理器中,该处理器执行从旧数据库对象到新数据库对象的实际迁移。
@Component
@Import({mssqldConfiguration.class, H2dConfiguration.class})
public class ClassificationItemProcessor implements ItemProcessor<org.h2.d, org.mssql.d> {
public ClassificationItemProcessor() {
super();
}
public Classification process(org.h2.d a) throws Exception {
d di = new di();
di.setA(a.getA);
di.setB(a.getB);`
// asking for object e.g. possible via, But this does not work:
// Set<e> es = eRepository.findById(a.getes());
di.set(es)
...
// How to model a m:n?
return d;
}
所以我基本上可以通过另一个数据库调用(存储库)请求相关对象并将其添加到 d.但是当我这样做时,我宁愿遇到 LazyInitializationExceptions,或者,如果它成功,有时中间表中的数据不会被填满。
对此建模的最佳做法是什么?
【问题讨论】:
标签: java spring hibernate spring-batch data-migration