Hallo,
ich hab eine sticknormale 1:n Beziehung mit Hibernate:
Nun will ich folgendes:
Das funktioniert so, allerdings nur mit diesem refresh. Ist auch logisch, die Book-Liste wird von Hibernate erst mit dem refresh gefuellt. Allerdings gefaellt mir das so nicht (fehleranfaellig, falls ich den refresh mal vergesse und eine sinnlose SQL Abfrage).
Ich koennte die Book.setCategory Methode so schreiben:
Analog eine Category.addBook Methode:
Ist das ein korrektes Vorgehen, oder gibts da irgendein tolles Pattern fuer? Wie geht ihr mit solchen bidirektionalen 1:n-Beziehungen um?
ich hab eine sticknormale 1:n Beziehung mit Hibernate:
Code:
public class Book {
...
@ManyToOne @JoinColumn( name="category_fk" )
public Category getCategory() {
return this.category;
}
...
}
public class Category {
...
@OneToMany( mappedBy="category" )
public List<Book> getBooks() {
return this.books;
}
...
}
Nun will ich folgendes:
Code:
Book book;
Category cat;
cat = createCategory( ... );
book = createBook( ... );
book.setCategory( cat );
getBookDAO().save( book );
getCategoryDAO().refresh( cat );
assertEquals( "1 book in category", 1, cat.getBooks().size() );
Das funktioniert so, allerdings nur mit diesem refresh. Ist auch logisch, die Book-Liste wird von Hibernate erst mit dem refresh gefuellt. Allerdings gefaellt mir das so nicht (fehleranfaellig, falls ich den refresh mal vergesse und eine sinnlose SQL Abfrage).
Ich koennte die Book.setCategory Methode so schreiben:
Code:
public void setCategory( Category category ) {
this.category = category;
category.getBooks().add( this );
}
Analog eine Category.addBook Methode:
Code:
public void addBook( Book book ) {
book.setCategory( this );
}
Ist das ein korrektes Vorgehen, oder gibts da irgendein tolles Pattern fuer? Wie geht ihr mit solchen bidirektionalen 1:n-Beziehungen um?