Hibernate nie zapisuje kolekcji do bazy danych

Odpowiedz Nowy wątek
2015-11-22 13:57
Biały Szczur
0

Cześć, mam problem z hibernate kod poniżej.

Author.java

@JoinColumn(name = "book")
    @ManyToOne
    private Book book;

Book.java

@OneToMany( mappedBy="book", cascade=CascadeType.ALL, fetch = FetchType.EAGER)
    private Collection<Author> authors = new ArrayList<>();

Gdy próbuje zapisać obiekt kasy Book do bazy leci zapytanie : Hibernate: insert into Author (book, firstName, lastName) values (?, ?, ?).
Problem jest taki, że w bazie danych nie chce zapisywać listy autorów dla książki i nie leci przy tym żaden błąd (zapisuje się wszystko oprócz listy).

Kod do zapisu:

public static void addBook(String title, String releaseDate, 
            String releaseNumber, List<Author> authors) {
        Session session = HibernateUtils.getSessionFactory().openSession();
        Transaction transaction = session.beginTransaction();

        Book book = new Book();
        book.setTitle(title);
        book.setReleaseDate(releaseDate);
        book.setReleaseNumber(releaseNumber);

        authors = new ArrayList<>();
        authors.add(new Author("aaa", "bbb"));
        book.setAuthors(authors);
        session.saveOrUpdate(book);
        transaction.commit();
        session.close();
    }

Wiem, że kiedyś zmagałem się z tym x godzin i okazała się jakaś bzdura, ale tam miałem Springa do pomocy, tu muszę mieć tylko czysty Hibernate.
Pozdrawiam.

Pozostało 580 znaków

2015-11-22 14:56
0

sprobuj book.getAuthors().add

edytowany 1x, ostatnio: Szczery, 2015-11-22 14:56

Pozostało 580 znaków

2015-11-22 15:21
Biały Szczur
0

Nie działa, dalej nie tworzy w ogóle tej tabeli pośredniej.

Pozostało 580 znaków

2015-11-22 15:52
0

Spróbuj najpierw INSERTnąć autora (w tej samej transakcji) może też jeszcze wcześniej ustawić książkę.

Pozostało 580 znaków

2015-11-22 16:07
Biały Szczur
0

Też nic.

Pozostało 580 znaków

2015-11-22 16:12
Biały Szczur
0

Dodam jeszcze, że aplikację odpalam na Glassfishu jako servlet + Netbeans IDE - jeśli to ma jakiekolwiek znaczenie.

Pozostało 580 znaków

2015-11-22 17:52
0

https://howtoprogramwithjava.[...]y-bidirectional-relationship/
W skrócie: nie ustawiłeś autorowi książki a masz ustawione mappedBy na stronę po której jest autor, więc to on jest "właścicielem relacji".


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2015-11-22 17:55

Pozostało 580 znaków

2015-11-23 21:44
Biały Szczur
0

Zrobilem dokładnie wedlug powyższego linku, ale nadl nie działa coś..

Pozostało 580 znaków

2015-11-23 22:01
Biały Szczur
0

Ok zadziałało, ale jest kolejny problem gdy dodaje książkę z autorem, a następnię kolejną z tym samym autorem to z pierwszej ksiązki tak jakby traci tego autora i przechodzi do drugiej ksiazki (w pierwszej książce usuwa się z listy).. Jakoś używałem już Hibernate pare razy i nigdy takich problemów nie miałem..

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0