Wpis z mikrobloga

Pomoże ktoś z #hibernate #java? Mam zmapowany obiekt, pobieranie działa dobrze, wstawianie też (z własnym id), tylko jest problem z sekwencją id (primary key).
Obiekt wstawiam tak: http://pastebin.com/Prj31XyS
W klasie encji mam: http://pastebin.com/SbdRf0bn
Id jest intem private int id;
Próbowałem jeszcze inne sposoby definiowania sekwencji w klasie, ale commit do bazy zawsze leci z id=0. Może gdzie indziej robię błąd? Może w xmlu coś trzeba zdefiniować?
Na jakim etapie powinien zostać nadany id? Podczas tworzenia obiektu? Czy podczas tworzenia zawsze będzie zero i dopiero przy wstawianiu jest zmieniany?
Baza postgresql, i w niej zdefiniowana sekwencja działająca przy wstawianiu zapytaniami sql.
  • 17
Takie coś jeszcze próbowałem np.

@SequenceGenerator(name="pk_sequence",sequenceName="products_id_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_sequence")
@psi-nos: id jest tworzone po wstawieniu do bazy. Czyli jak dodajesz obiekt do bazy i chcesz mieć jego id, to po wstawieniu musisz go jeszcze pobrać (no chyba że masz ustawione, że automatycznie aktualizuje obiekt w referencji po wstawieniu do bazy).

PS. Spring Data ;)
@mk321: no ok, to jedno wiem, tylko w dalszym ciągu hibernate wstawia do bazy z id=0 (wyrzuca, że naruszenie ograniczenia, bo id=0 już istnieje)

Spring Data? alternatywa jakaś?
tak jakby nakładka na Hibernate:


@mk321: Jaka znowu nakładka? Spring Data to żadna nakładka na Hibernate.

@psi-nos: Uprawiasz tu jakąś dziwną filozofię. Zamiast:

session.beginTransaction();

[...]

session.getTransaction().commit();


Powinno być:

Transaction tx = session.beginTransaction();

[...]

tx.commit();


Przynajmniej wiesz, którą transakcję obsługujesz. Poza tym nie można z tego kodu wiele wywnioskować.

Poza tym @GeneratedValue(strategy=GenerationType.AUTO) dużo zależy od ustawień bazy danych.
@psi-nos: No to już w ogóle kosmos co tu masz, bo generator class - identity jest typowo mysqlowy, a sequence które ci nie chciało działać, powinno być spokojnie supportowane przez postgresa i oracla.

W ogóle to ciężko mi się odnieść, bo zawsze robię w Spring+Hibernate i nie muszę się bawić w samodzielną obsługę transakcji, ale jak chcesz to robić w ten sposób to sprawdził bym czy to nie jest wina postgresa,
@Hatespinner: może głupie pytanie, no ale jestem początkujący. Może jak mam zdefiniowany mapping w xmlu dla obiektu, to hibernate nie patrzy na adnotacje w klasie? Spróbowałem usunąć wszystkie adnotacje (znaczy te z @) w klasie i nic się nie zepsuło.