OneToMany undirektional

Status
Nicht offen für weitere Antworten.
G

Gast2

Gast
Hallo zusammen,

ich habe 2 Klassen... Klasse A hat eine Liste von Klasse B und die Beziehung ist undirketional.Wenn ich eine Instanz von Klasse A erzeug legt er mir diese auch in der Datenbank an wenn ich nun aber nun eine Instanz von B der liste hinzufüg wird diese nicht in der Datenbank gespeichert? Warum? Was fehlt noch?

Klasse A
Java:
@Entity
@Table(name = "A")
public class A implements Serializable {

	private Date date;
	private List<B> bs;

	public A() {
		bs= new ArrayList<B>();
	}
	@Id
	public Date getDate() {
		return date;
	}
	
	public void setDate(Date date) {
		this.date = date;
	}

	@OneToMany
	public List<B> getBs() {
		return gains;
	}

	
	public void setBs(List<B> bs) {
		this.bs = bs;
	}

public void addB(B b)
{
bs.add(b);
}

und Klasse 2
Java:
@Entity
@Table(name = "B")
public class B implements Serializable{
	private int id;
	private Double value;

	public void setId(int id) {
		this.id = id;
	}
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setValue(Double value) {
		this.value = value;
	}
	public Double getValue() {
		return value;
	}
}

Java:
	public void createA(A a) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.saveOrUpdate(a);
		session.getTransaction().commit();
	}
 

neonfly

Aktives Mitglied
Java:
@OneToMany(mappedBy="attributInDeinerPKKlasse", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
 
G

Gast2

Gast
okay habe ich jetzt so gemacht... aber wie hat es keine auswirkung
also wenn ich das hier mache

Java:
	public void createA(A a) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.saveOrUpdate(a);
		session.getTransaction().commit();
	}

	public void addB(B b, A a) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
                // B wird nicht gespeichert...
		a.addB(b);
		session.getTransaction().commit();
	}

wenn ich es hingegen in einer methode mache klappt es? Was mache ich noch falsch??

Java:
	public void createA(A a) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.saveOrUpdate(a);
                // jetzt ist B in der Datenbank
                a.addB(new B())
		session.getTransaction().commit();
	}

es klappt nur wenn ich davor die Instanz a nochmal aus der DB raushole, aber des kanns ja net sein oder?

Aber des kann ja nicht lösung sein das Objekt jedes mal davor aus der DB zu holen.
Weil ich speicher die Objekte ja später in einem Model und dort hole ich sie auch raus, aber irgendwie kennt die Session dann das Objekt nicht mehr warum auch immer? Jeman ein gutes kleines Bsp. wie man es richtig macht????
Gerade läuft es so ab: Applikation startet holt alle A objekte speichert die im model(gleiche Instanz) model holt das gewollte A und fügt (wie oben versucht) B hinzu. B ist zwar in der Liste von A drin, ABER nicht in der Db d.h. beim Neustart enfach weg =(... hab cascade all hinzugefügt.
 
Zuletzt bearbeitet von einem Moderator:
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben