【问题标题】:Spring batch inserting relationshipsSpring批量插入关系
【发布时间】:2015-02-02 13:07:06
【问题描述】:

我正在将 xml 中的记录插入到具有许多外键的表中。从 XML 数据中可能存在尚不存在的外部关系,因此我需要在插入主实体之前插入它。

例如

<person>
   <name>p1</name>
   <school>XYZ School</school>
<person>

我的 JDBCBatchItemWriter sql 将是:

INSERT INTO PERSON (NAME, SCHOOL_ID) VALUES (:name, (SELECT ID FROM SCHOOLS WHERE SCHOOL_NAME = :school));

在插入主要实体之前,我是否需要一个单独的作业步骤来插入每个关系?我一直在寻找具有关系数据的示例,我发现的所有内容似乎都是外键已经存在的简单情况。

解决方案: 最终迈出了一步,为我需要制作的所有外来对象创建了一个 HashMap>。然后将其注入下一步,如果该对象尚不存在,则执行插入。可能需要比使用内存 HashMap 更好的解决方案,但目前似乎可行。

【问题讨论】:

    标签: spring spring-batch


    【解决方案1】:

    有几种不同的方法可以解决这个问题。问题实际上是关于它们如何加载的。您是否需要先检查它们是否存在?如果不必要地执行此检查,可能会对性能产生很大影响。实现这一点的最高效方法是通过一个单独的步骤,假设您可以在前面的步骤中盲目地插入它们。

    【讨论】:

    • 你好迈克尔。是的,我需要检查它们是否已经存在。因此,对于每个外键,我将有一个步骤来遍历文件,检查它是否已经存在于 ItemProcessor 中,然后如果外来对象还不存在则插入?
    • 我建议浏览一次文件并跟踪需要创建哪些外键,如果可能的话,一次完成所有操作。您需要检查 db 是否存在密钥的次数越少,并且需要迭代文件的次数越少,作业的执行效果就越好。我需要更多地了解数据才能更深入地了解。
    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2011-02-11
    • 2018-05-17
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多