У меня есть две таблицы tab1 (id, col1, col2), а затем еще одна tab2 (id, col3, col4, tab_id). Столбец id этой первой таблицы является внешним ключом для столбца "tab_id" второй таблицы tab2.
Теперь я получу входной Json, который будет хранить данные в tab1, но для таблицы tab2 будет 10000 записей. Я хочу сделать несколько вставок для обеих таблиц, но в одной транзакции, используя hibernate или пакетные вставки JDBC. Так что сначала нужно
1. Одна транзакция для tab1 и tab2, т. Е. В случае сбоя обе транзакции необходимо откатить
2. Пакетные вставки для таблицы tab2, так как не хотят попадать в базу данных 10000 раз из-за проблем с производительностью.
Я попытался использовать приведенный ниже код, но это не помогло. Есть идеи, как мне этого добиться
Expected results to have data in tab1 and tab2 simultaneously in a single transaction and batch inserts in tab2 table
int batch_size=1200;
session = HibernateSessionFactory.getSession();
tx = session.beginTransaction();
Tab1 tab1= new Tab1 ();
Integer structId =repo.getNextRecordId("Tab1"); //IN build method to get max(Id)+1 from the tab1 table
tab1.setId(structId);
tab1.setCol1(structInfo.getName());
tab1.setCol2(structInfo.getModule();
session.save(tab1);
List<DbObj> mappingDetails = structInfo.getMappingDetails();
if(mappingDetails!=null && mappingDetails.size()>0){
int recordCounter = 0;
for(DbObj dbObj: mappingDetails){
recordCounter++;
Tab2 tab2= new Tab2();
tab2.setTab1Id(structId );
tab2.setCOl3(dbObj.getCol3);
tab2.setCol4(dbObj.getCol4);
session.save(tab2);
if (recordCounter % batchSize == 0){
session.clear();
session.close();
}
}
}
tx.commit();