Cześć,
Szukam dobrego sposobu na zapis danych z jednego formularza do dwóch tabel. Relacja jeden do wielu.
Mam 2 tabele na razie pomijam fakt zastosowania listy lub mapy. W skrócie:
Employee
id_employee
Address
id_address
id_employee
Pobranie danych z formularza, stworzenie obiektów Employee i Address.
Nie mam id_employee dopóki nie zapiszę pracownika w bazie danych (tam nadaję ID triggerem używając stworzonej sekwencji).
Muszę więc
- zapisać pracownika do bazy danych,
- pobrać z bazy danych jego ID,
- ustawić to id w obiekcie address
- zapisać address do bazy.
I tu pojawia się problem jak to zrobić. Przykład który udało mi się znaleźć wygląda tak:
String sql = "insert into role(name, code) values(?,?);" +
"insert into person(first_name, last_name, description, role_id) values(?,?,?,(SELECT LAST_INSERT_ID()));";
int[] arr = template.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Role role = roles.get(i);
Person person = list.get(i);
ps.setObject(1, role.getName());
ps.setObject(2, role.getCode();
ps.setObject(3, person.getFirstName());
ps.setObject(4, person.getLastName());
ps.setObject(5, person.getDescription());
}
@Override
public int getBatchSize() {
return list.size()
}
});
W nim jednak, wszystko odbywa się przy użyciu jednego insertu do bazy danych, a skoro w swoim projekcie mam osobno EmployeeRepo i AddressRepo, nie chciałbym całego jednego SQL`a pakować do EmployeeRepo.
Jak można inaczej podejść do tego tematu?