Каков порядок ResultSet, возвращаемый PreparedStatement.getGeneratedKeys () при пакетной обработке? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь выяснить, как отобразить возвращенный первичный ключ как внешний ключ в подтаблицу класса.Это пример того, над чем я работаю.

Примечание: весь код используется для объяснения проблемы и может не скомпилироваться.Это также использует postgresql и не требует переносимости на другие базы данных.Библиотека драйверов: org.postgresql:postgresql:9.4.1209

Это пример основного класса Record и подтаблицы класса RecordInfo.

class Record {
    String id; //primary key
    String data;
    List<RecordInfo> list; 
}

RecordInfo имеет первичный ключ и внешний ключ.

class RecordInfo {
    String recordId; //foreign key for Record
    String id; //primary key
    String data;
}

При вставке отдельных строк для Record getGeneratedKeys () вернет ResultSet с одной строкой, содержащей ключи.

String insertSql = "INSERT INTO record (data) VALUES (?)";
PreparedStatement insertPs = conn.prepareStatement(insertSql, new String[]{"id"});
...map object into insertPs...
insertPs.executeUpdate();
ResultSet rsKey = insertPs.getGeneratedKeys();
if(rsKey.next()) {
    record.id = rsKey.getString("id");
}

Это облегчает сопоставление идентификатора Record обратно в исходный объект и использованиеэто как внешний ключ в каждом RecordInfo.Если я переключу алгоритм для пакетной вставки записи, будет ли возвращенный ResultSet в том же порядке, что и исходный список объектов записи?

PreparedStatement insertPs = conn.prepareStatement(insertSql, new String[]{"id"});
for(Record record : records) {
    ...map object into insertPs...
    insertPs.addBatch();
}
insertPs.executeUpdate();
ResultSet rs = insertPs.getGeneratedKeys();
for(Record record : records) {
    rs.next();
    record.id = rs.getString("id");
}

Я беспокоюсь, что буду назначать внешние ключи неправильному RecordInfoобъекты, если порядок в rs не совпадает с моим списком записей.Есть ли лучший способ сопоставить возвращенные ключи?Должен ли я подумать о том, чтобы не пакетировать мои вкладыши?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...