Zdravím!

Myslím si, že problém je v bidirection ManyToMany vztahu.
Musíte propojit vztahy oboustraně.

Vyřešit to jde například tak, že se napíše nová metoda do service pro propojení knih a autorů.

např.

public void addBookToAuthor(int bookId, int authorId){
   Book book = findBookById(bookId);
   Author author = findAuthorById(authorId);

   book.getAuthors().add(author);
   author.getBooks().add(book);
}

případně propojit oboustraně Book a Author v metodě save.

Fafi

[EMAIL PROTECTED] napsal(a):
Dobrý den
nemuhu najít problém.

Mám 2 entity v asociaci ManyToMany.

Pokud ukládám nový objekt - není ještě v DB. Uloží se správně i asociovaná kolekce.
tedy:

autor1 = service.find(1);
autor2 = service.find(2);
book = new Book();
book.addAutor(autor1);
book.addAutor(autor2);
service.save(book);
//OK

pokud, ale objekt Book už je persistovaný a přidám do kolekce další objekty ,
tyto objekty se do DB neuloží. Nemohu přijít na to kde dělám chybu:

autor4 = service.find(4);
book = service.find(1);
book.addAutor(autor4);
service.save(book);
//autor4 se do asociované tabulky nepřidá

---------------------------------------------------------------
Zde přikládám asociace:

@ManyToMany
    @JoinTable(name = "Autor_Book",
    joinColumns = [EMAIL PROTECTED](name="bookId")},
    inverseJoinColumns = [EMAIL PROTECTED](name="autorId")}
    )
    private List<Autor> autors = new ArrayList();


 @ManyToMany(mappedBy="autors")
    private List<Book> books = new ArrayList();


metoda save:
public void save(Book book) {
if (book.getId() == null) { entityManager.persist(book); } else { entityManager.merge(book); }
}
-----------------------------------------------------
Děkuji za pomoc
Tomáš Jurman

Odpovedet emailem