Я пишу приложение JSF 2.0 с базой данных Hibernate и Postgresql. Моя проблема - плохое понимание того, как обрабатывать сеанс с Hibernate при вставке данных в несколько таблиц за раз. У меня есть метод savePerson. Метод вызывается столько раз, сколько адресов отправлено пользователем, но объект Person создается только один раз. Затем метод savePerson вызывает метод addAddress. Код выглядит так:
public Person savePerson(Person p, String address) {
Transaction tx = null;
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
if (p == null) {
= new Person();
try {
tx = session.beginTransaction();
session.save(p);
tx.commit();
} catch (RuntimeException e) {
if (tx != null && tx.isActive()) {
try {
tx.rollback();
} catch (HibernateException e1) {
}
throw e;
}
}
}
int id = p.getId();
addAddress(4, id, address);
return p;
}
И метод addAddress:
public void addAddress(int table_id, int row_id, String address) {
Transaction tx = null;
session = HibernateUtil.getSessionFactory().openSession();
Address a = new Address(table_id, row_id, address);
try {
tx = session.beginTransaction();
session.save(a);
tx.commit();
} catch (RuntimeException e) {
System.out.println("first try");
if (tx != null && tx.isActive()) {
System.out.println("first try if");
try {
System.out.println("first try if try");
tx.rollback();
} catch (HibernateException e1) {
}
// throw again the first exception
throw e;
}
throw e;
}
Но я получаю следующую ошибку:
org.hibernate.TransactionException: Transaction not successfully started
Итак, как правильно открывать и закрывать сеанс при вставке данных в несколько таблиц одновременно?
С наилучшими пожеланиями,
дерзость.