我想以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中。 这可以工作,但是需要花费一些时间来插入所有数据。有没有更好的方法来解决此任务?