Hallo,
ich haben in einem Projekt ein Problem mit einer Viele-zu-Viele - Beziehung, welche wie folgt realisiert wurde:
Bauteil-Klasse:
Code:
package logik.ticket;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
/**
*
* @author Benedikt Eberhardinger
*/
@Entity
@Table(name="Bauteil")
public class Bauteil implements Serializable {
@Id
@Column(name="Bauteil_ID")
private int bauteil_ID;
@Column(name="Name")
private String name;
@Column(name="Kategorie")
private String kategorie;
@Column(name="NochErhaeltlich")
private boolean nochErhaeltlich;
@Column(name="Preis")
private double preis;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name="Bauteil_Produkt",
joinColumns=@JoinColumn(name="Bauteil_ID"),
inverseJoinColumns=@JoinColumn(name="Produkt_ID")
)
private List<Produkt> produkte;
public Bauteil() {
}
public Bauteil(int bauteil_ID, String name, String kategorie, boolean nochErhaeltlich, double preis, List<Produkt> produkte) {
this.bauteil_ID = bauteil_ID;
this.name = name;
this.kategorie = kategorie;
this.nochErhaeltlich = nochErhaeltlich;
this.preis = preis;
this.produkte = produkte;
}
public List<Produkt> getProdukte() {
return produkte;
}
public void setProdukte(List<Produkt> produkte) {
this.produkte = produkte;
}
public int getBauteil_ID() {
return bauteil_ID;
}
public void setBauteil_ID(int bauteil_ID) {
this.bauteil_ID = bauteil_ID;
}
public String getKategorie() {
return kategorie;
}
public void setKategorie(String kategorie) {
this.kategorie = kategorie;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isNochErhaetlich() {
return nochErhaeltlich;
}
public void setNochErhaetlich(boolean nochErhaeltlich) {
this.nochErhaeltlich = nochErhaeltlich;
}
public double getPreis() {
return preis;
}
public void setPreis(double preis) {
this.preis = preis;
}
}
Produkt-Klasse:
Code:
package logik.ticket;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
/**
*
* @author Benedikt Eberhardinger
*/
@Entity
@Table(name="Produkt")
public class Produkt implements Serializable {
@ManyToMany(mappedBy="produkte")
List<Bauteil> bauteile;
@Id
@Column(name="Produkt_ID")
private int produkt_id;
@Column(name="Name")
private String name;
@Column(name="Kategorie")
private String kategorie;
@Column(name="VerkaufsDatum")
private String verkaufsDatum;
@Column(name="NochErhaeltlich")
private boolean nochErhaeltlich;
public Produkt() {
}
public Produkt(List<Bauteil> bauteile, int produkt_id, String name, String kategorie, String verkaufsDatum, boolean nochErhaeltlich) {
this.bauteile = bauteile;
this.produkt_id = produkt_id;
this.name = name;
this.kategorie = kategorie;
this.verkaufsDatum = verkaufsDatum;
this.nochErhaeltlich = nochErhaeltlich;
}
public List<Bauteil> getBauteile() {
return bauteile;
}
public boolean isNochErhaeltlich() {
return nochErhaeltlich;
}
public void setNochErhaeltlich(boolean nochErhaeltlich) {
this.nochErhaeltlich = nochErhaeltlich;
}
public void setBauteile(List<Bauteil> bauteile) {
this.bauteile = bauteile;
}
public String getKategorie() {
return kategorie;
}
public void setKategorie(String kategorie) {
this.kategorie = kategorie;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getProdukt_id() {
return produkt_id;
}
public void setProdukt_id(int produkt_id) {
this.produkt_id = produkt_id;
}
public String getVerkaufsDatum() {
return verkaufsDatum;
}
public void setVerkaufsDatum(String verkaufsDatum) {
this.verkaufsDatum = verkaufsDatum;
}
}
Ich bekommen vom Hibernate-Framework beim auführen folgender JUnit keine Fehler:
Code:
@Test
public void speichernTestProdukt() {
System.out.println("Test speichern Produkt");
Data<Produkt> data_pr = new Data<Produkt>();
Data<Bauteil> data_bt = new Data<Bauteil>();
Bauteil bauteil6 = data_bt.finden(6, Bauteil.class);
//List<Bauteil> bauteile = new LinkedList<Bauteil>();
Produkt produkt3 = data_pr.finden(3, Produkt.class);
List<Bauteil> bauteile = produkt3.getBauteile();
for (Bauteil bt : produkt3.getBauteile()) {
System.out.println(bt.getName());
}
bauteile.add(bauteil6);
for (Bauteil bt : produkt3.getBauteile()) {
System.out.println(bt.getName());
}
data_pr.speichern(produkt3);
}
Die Data-Klasse aggiert im Projekt als Fassade für das Hibernate-Framework.
Allerdings ist das neu angelegte Bauteil beim wieder aufrufen (über die finde()-Mehtode) nicht mehr vorhanden und es werden in der Zwischen-Tabelle auch keine neuen Daten vorhanden.
Ich würde mich freuen, wenn mir hier jemand weiterhelfen kann.