Wpis z mikrobloga

Od niedawna zaczynam przygodę z hibernate - pracuję na instniejącej już bazie danych i po raz pierwszy poważnie trafiłem głową w ścianę. Do rzeczy - posiadam dwie encje - OrderHeader oraz OrderLine. OrderHeader posiada listę OrderLine. Z selectami nie problemów - wszystko ładnie się zwraca. Inserty także śmigają - tutaj fragment OrderDAO:

Boolean addNewOrder(OrderHeader orderHeader) {
Session session = this.sessionFactory.openSession();
try {
session.save(orderHeader);
return true;
} catch (HibernateException e) {
return false;
} finally {
session.close();
}
}

Problem jest dopiero przy updacie oraz usuwaniu (a raczej próbie). Mam odpalone logowanie SQLa w springu - przy updacie wykonuje się TYLKO select zwracając wynik. Żaden update, żaden exception, nic, pustka. Przykładowo taki oto kod:

Session session = this.sessionFactory.openSession();
OrderHeader newHeader = (OrderHeader) session.merge(orderHeader);
session.close();
return true;

wywołuje tylko następujące zapytanie sql:


Z kolei dla session.delete(getOrderHeader(orderHeaderId)); wykonuje się update na OrderLine ustawiające OrderHeaderID jako null, zamiast usunąć najpierw wszystkie OrderLine a później rodzica.

Cały wieczór wczoraj spędziłem na czytaniu na temat działania hibernate, i zdałem sobie sprawę chociażby z tego, że mogłem tutaj użyć encji transient a nie detached. Ale takie rozwiązanie także powinno działać. Dodatkowo dorzucam DDL obydwu tabel:

OrderLine
OrderHeader

Adnotacje wydają się być prawidłowe na encjach. Wydaje mi się, że działanie hibernate także ogarniam. Jeżeli ktoś widzi gdzieś błąd proszę o wskazanie możliwych pułapek.

#programowanie #java #javaniewwersjiscript #spring #hibernate #sql #mysql #jpa
  • 7
@baszmen: Ta, na stacka można psioczyć, ale jak dobrze zadasz pytanie to zapewne się ktoś znajdzie kto pomoże. Chociaż dostałem kilka razy minusy za gówniane pytanie i w sumie dlatego założyłem konto na wykopie :D tutaj możesz nawet spytać jak napisać hello world w js i nikt się nie oburzy, ba, jeszcze ci testy do tego napiszą :D