Saya dapat menyelesaikan ini dengan posting yang disebutkan dalam komentar Alexandros. Solusinya sekarang terlihat seperti ini:
sql.withTransaction {
try {
sql.withBatch(1000, 'insert into category (id, version, name, parent_id) ' +
'select :id, :version, :name, :parent_id ' +
'where not exists (select name, parent_id from category where name = :name and parent_id = :parent_id);') { stmt ->
categoryInserts.each {
try {
stmt.addBatch([id: it.id, version: 0, name: it.name, parent_id: it.parent?.id])
} catch (SQLException e) {
log.error("Category ${it.name} with parent ${it.parent?.id} could not be inserted.")
}
}
}
} catch (BatchUpdateException e) {
log.error("Categories could not be inserted.", e)
}
sql.commit()
}
Ketahuilah bahwa ini diselesaikan dengan dialek SQL postgresql. Untuk DBMS lain mungkin merupakan pendekatan yang berguna untuk menggunakan prosedur SQL dalam metode withBatch.
Jika seseorang mengetahui cara melakukan ini dengan SQL standar, tolong beri saya petunjuk.