Mam problem na, który natknąłem się gdy zacząłem bazę zaopatrywać w metody modyfikujące już istniejące tabele.
Np Wczytuje sobie obiekt i do niego coś dodaję do kolejki albo modyfikuję jakąś daną i daję session.saveOrUpdates()
Ale nie działa. Przy zapisie istniejących nie ma problemu i sądziłem zawsze że modyfikacja jest analogiczna ale się zdziwiłem gdy okazało się ze nie działa i nie mam jakoś pomysłu jak to powinno być inaczej. Będę wdzięczny za info. W necie główie jest o pierwszym zapisaniu. Jednak jeszcze będę szukał.
Za każdą odp będę wdzięczny
0
0
Podam kawałek kodu:
public static Osoba wczytajOsobe(long id){
Osoba o = new Osoba();
Transaction tx = null;
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
try {
tx = session.beginTransaction();
o = (Osoba) session.load(Osoba.class,(long)id, LockMode.UPGRADE);
tx.commit();
return o;
} catch (RuntimeException e) {
if (tx != null && tx.isActive()) {
try {
tx.rollback();
} catch (HibernateException e1) {
logger.debug("Error rolling back transaction");
}
throw e;
}
}
return o;
}
Tą metodą chcę zwracać obiekt który będę mógł modygikować
W poniższej metodzie coś modyfikuję i zapisuję. Jednak modyfikacja nie następuję. Błędne jest pewnie podejście jednak nie mam pomysłu jak inaczej to rozwiązac
private static void add() {
Transaction tx = null;
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
try {
tx = session.beginTransaction();
Osoba os = wczytajOsobe(1111);
System.out.println("id to "+os.getIdentyfikator());
Kredyt kr = new Kredyt("346788888888768", 324, 453, 3, 453, os);
os.setPojedynczyRachunek(kr, "kr");
kr.setWlasciciel(os);
session.save(os);
session.save(kr);
session.flush();
session.refresh(os);
tx.commit();
} catch (RuntimeException e) {
if (tx != null && tx.isActive()) {
try {
tx.rollback();
} catch (HibernateException e1) {
logger.debug("Error rolling back transaction");
}
throw e;
}
}
}
Do obiektu osoba dodaję obiekt kredyt. Jest to powiązanie 1 do wielu.