Я пытаюсь выяснить, как отобразить возвращенный первичный ключ как внешний ключ в подтаблицу класса.Это пример того, над чем я работаю.
Примечание: весь код используется для объяснения проблемы и может не скомпилироваться.Это также использует 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 не совпадает с моим списком записей.Есть ли лучший способ сопоставить возвращенные ключи?Должен ли я подумать о том, чтобы не пакетировать мои вкладыши?