如何使用以下命令将数据批量插入具有1:n关系的两个表中?

时间:2019-02-13 11:57:45

标签: java postgresql groovy one-to-many

我想以1:n的关系在两个表中插入数据。数据量非常大,所以我想使用批处理语句插入表中。问题是,当我使用“父”表执行此操作时,无法将“子”表中的数据分配给相应的父项。

我有三个表,比方说第一个表叫做Data,第二个表是Employee,第三个表是EmployeeData。在表中,数据是我将在应用程序中处理的大量数据。现在,在处理完数据之后,我有了一个针对多个员工的数据集。首先,我想在表Employee中为数据集中的每个雇员创建一个条目,然后在EmployeeData表中为该雇员的相应数据创建条目。

Sql sql = new Sql(conn)

employees.each {
    def employeeId = sql.firstRow("select coalesce(max(id), 1) from employee")

    sql.executeUpdate("""
        insert into employee (id, firstname, lastname)
        values (:id, :firstname, :lastname)
    """, [id: employeeId, fistname: it.firstname, lastname: it.lastname])

    sql.withBatch("""
        insert into employee_data (id, working_hours)
        values (nextval('employee_data_id_seq'), :hours)
    """) { stmt ->
        employees.data.each {
            stmt.addBatch([
                    hours: it.hours
            ])
        }
    }
}

我正在使用groovy sql与数据库进行交互。遗憾的是,由于某些原因,我也无法在数据库中使用自动增量,因此我编写了自己的序列来为插入生成ID。这是我实际内容的简化版本,在实际应用程序中,我的表具有更多列。大约有300.000个数据集要插入到EmployeeData中。 这可以工作,但是需要花费一些时间来插入所有数据。有没有更好的方法来解决此任务?

0 个答案:

没有答案