G
Gast2
Gast
Hallo,
ich möchte eine bidirektionale many to many beziehung zwischen 2 Klassen herstellen
1. Klasse
2. Klasse
3. TestKlasse
Also die Methode addAuthorToBook klappt wunderbar jedesmal wenn die aufgerufen wird hat das Buch nachher ein Author mehr drin und gibt diese Zahl auf auf der Konsole aus.
Die 2te Methode addBookToAuthor funktioniert leider nicht. Der Auhtor kann keine Bücker aufnehmen. Warum???
Der Author hat zwar alle Bücher die über die 1. methode geaddet werden, aber die über die 2 te methode gehen verloren.??
Hier in diesem Beispiel:
1. Transaktion :Erst wird der Author 1 geladen und dann dem Buch 2 hinzugefügt. Also hat das Buch 2 einen Author. Und der Author hat ein Buch.
2. Transaktion
ann in der 2ten Methode wird Buch 1 geladen und dem Author hinzugefügt. Jetzt sollte Author 1 , 2 Bücher in seiner Liste haben(Buch 1 und 2). Er hat aber nur 1 Buch in seiner Liste und das ist buch 2 aus der 1. Transaktion.
Gruß
ich möchte eine bidirektionale many to many beziehung zwischen 2 Klassen herstellen
1. Klasse
Code:
@Entity
@Table(name = "books")
public class Book {
private int id;
private List<Author> authors;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@ManyToMany(targetEntity= Author.class ,cascade = CascadeType.ALL)
@JoinTable(name = "authors_books",
joinColumns = @JoinColumn(name = "books_id"),
inverseJoinColumns = @JoinColumn(name = "authors_id"))
public List<Author> getAuthors() {
return authors;
}
public void setAuthors(List<Author> authors) {
this.authors = authors;
}
}
2. Klasse
Code:
@Entity
@Table(name = "authors")
public class Author {
private int id;
private List<Book> books;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@ManyToMany(mappedBy="authors",targetEntity= Book.class ,cascade = CascadeType.ALL)
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
}
3. TestKlasse
Code:
public class TestMain{
public static void main(String[] args) {
TestMain mgr = new TestMain();
mgr.addAuthorToBook(1, 2);
mgr.addBookToAuthor(1, 1);
HibernateUtil.getSessionFactory().close();
}
private void addAuthorToBook(int a, int b)
{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Author author = (Author) session.load(Author.class, a);
Book book = (Book) session.load(Book.class, b);
book.getAuthors().add(author);
System.out.println(book.getAuthors().size());
session.getTransaction().commit();
}
private void addBookToAuthor(int a, int b) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Author author = (Author) session.load(Author.class, a);
Book book = (Book) session.load(Book.class, b);
author.getBooks().add(book);
System.out.println(author.getBooks().size());
session.getTransaction().commit();
}
Also die Methode addAuthorToBook klappt wunderbar jedesmal wenn die aufgerufen wird hat das Buch nachher ein Author mehr drin und gibt diese Zahl auf auf der Konsole aus.
Die 2te Methode addBookToAuthor funktioniert leider nicht. Der Auhtor kann keine Bücker aufnehmen. Warum???
Der Author hat zwar alle Bücher die über die 1. methode geaddet werden, aber die über die 2 te methode gehen verloren.??
Hier in diesem Beispiel:
1. Transaktion :Erst wird der Author 1 geladen und dann dem Buch 2 hinzugefügt. Also hat das Buch 2 einen Author. Und der Author hat ein Buch.
2. Transaktion
Gruß