Cascade Problem (Hibernate)

Status
Nicht offen für weitere Antworten.

GilbertGrape

Bekanntes Mitglied
Ich versteh das irgendwie immernoch nicht so richtig.

Also, ich hab 2 Tabellen mit einer m-n Beziehung und eine Verknüpungstabelle mit einer eigenen Klasse.
In der hab ich an den 2 Beziehungen, den Cascade-Typ auf PERSIST gesetzt. Darunter verstehe ich, dass er beim persistieren die beiden anderen Objekte auch speichert (falls noch nicht vorhanden?). Das funktioniert aber so bei mir nicht. Ich kann ja mal etwas Code posten:
aus der Verknüpfungstabelle:
Code:
@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "unmodifiedText",insertable = false,	updatable = false)
	private UnmodifiedText unmodifiedText;
	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "paragraph",insertable = false,	updatable = false)
	private Paragraph paragraph;

aus der einen Tabellen (Paragraph):
Code:
@OneToMany(mappedBy = "paragraph")
	public Set<UnmodifiedText_Paragraph> getUtp() {
		return utp;
	}

	public void setUtp(Set<UnmodifiedText_Paragraph> utp) {
		this.utp = utp;
	}

public UnmodifiedText_Paragraph addUnmodifiedText(Integer pos, UnmodifiedText text){
		UnmodifiedText_Paragraph utp = new UnmodifiedText_Paragraph(this, pos, text);
		this.getUtp().add(utp);
		text.getUtp().add(utp);
		return utp;
	}

aus der 2. Tabelle (UnmodifiedTExt):

Code:
@OneToMany(mappedBy = "unmodifiedText")
	public Set<UnmodifiedText_Paragraph> getUtp() {
		return utp;
	}

	public void setUtp(Set<UnmodifiedText_Paragraph> utp) {
		this.utp = utp;
	}
	
	public UnmodifiedText_Paragraph addParagraph(Integer pos, Paragraph paragraph){
		UnmodifiedText_Paragraph utp = new UnmodifiedText_Paragraph(paragraph, pos, this);
		this.getUtp().add(utp);
		paragraph.getUtp().add(utp);
		return utp;
	}

und hier dann der Test:

Code:
DaoFactory factory = DaoFactory.instance(DaoFactory.HIBERNATE);
		//paragraphDao = factory.getParagraphDao();
		//paragraphDao.begin();
		//unmodTextDao = factory.getUnmodifiedTextDao();
		//unmodTextDao.begin();		
		utpd = factory.getUnmodifiedText_ParagraphDao();
		utpd.begin();

               Paragraph p = new Paragraph();
		p.setText("noch meeeeeehr Text. Bald ist Wochenende!");
		UnmodifiedText unmodText = new UnmodifiedText();
		unmodText.setText("aber erst noch Mittag!");
	//	paragraphDao.save(p);
	//	Long id = unmodTextDao.save(unmodText);
		UnmodifiedText_Paragraph utp = unmodText.addParagraph(1, p);
		utpd.save(utp);

          //      if (paragraphDao.getSession().isOpen()) {
	//	 paragraphDao.commit();
	//	}
	//	if (unmodTextDao.getSession().isOpen()) {
	//	 unmodTextDao.commit();
	//	}
		if (utpd.getSession().isOpen()) {
			 utpd.commit();
			}

Ich würde denken, dass es so funktionieren würde, tut es aber nicht. Er sagt dann immer, dass er null in die Verknüpfungstabelle eintragen würde und das nicht geht.
Wenn ich das Auskommentierte einkommentiere funktioniert es. Aber wieso geht das mit dieser Cascade nicht? ODer versteh ich das falsch?

Danke schonmal,
GG
 

byte

Top Contributor
Mit solchen unübersichtlichen und unvollständigen Code Snippets machst Du es einem nicht einfach, Dir zu helfen.
 

GilbertGrape

Bekanntes Mitglied
dann hier nochmal (fast) die kompletten Klassen:

1. Tabelle (die eine Hälfte der m-n-Beziehung)
Code:
@Entity
@Table
public class Paragraph {

	Long id;
	String text;
	Set<UnmodifiedText_Paragraph> utp = new HashSet<UnmodifiedText_Paragraph>();

	public Paragraph() {

	}

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@Lob
	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
	
	@OneToMany(mappedBy = "paragraph")
	public Set<UnmodifiedText_Paragraph> getUtp() {
		return utp;
	}

	public void setUtp(Set<UnmodifiedText_Paragraph> utp) {
		this.utp = utp;
	}
	
	public UnmodifiedText_Paragraph addUnmodifiedText(Integer pos, UnmodifiedText text){
		UnmodifiedText_Paragraph utp = new UnmodifiedText_Paragraph(this, pos, text);
		this.getUtp().add(utp);
		text.getUtp().add(utp);
		return utp;
	}

}

hier die andere Seite der Beziehung:
Code:
@Entity
@Table(name = "UNMODIFIED_TEXT")
public class UnmodifiedText {

	Long id;
	String text;
	Set<UnmodifiedText_Paragraph> utp = new HashSet<UnmodifiedText_Paragraph>();
	
	public UnmodifiedText() {

	}

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}
	@Lob
	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
	
	@OneToMany(mappedBy = "unmodifiedText")//,cascade=CascadeType.PERSIST)
	public Set<UnmodifiedText_Paragraph> getUtp() {
		return utp;
	}

	public void setUtp(Set<UnmodifiedText_Paragraph> utp) {
		this.utp = utp;
	}
	
	public UnmodifiedText_Paragraph addParagraph(Integer pos, Paragraph paragraph){
		UnmodifiedText_Paragraph utp = new UnmodifiedText_Paragraph(paragraph, pos, this);
		this.getUtp().add(utp);
		paragraph.getUtp().add(utp);
		return utp;
	}

}

Die Verknüpfungstabelle:

Code:
@Entity
@Table
public class UnmodifiedText_Paragraph {
	
	@Embeddable
	public static class Id implements Serializable{
		private Long unmodifiedText;
		private Long paragraph;
		
		public Id(){
			super();
		}
		
		public Id(Long unmodifiedText, Long paragraph){
			super();
			this.unmodifiedText = unmodifiedText;
			this.paragraph = paragraph;
		}

		
	}
	
	@EmbeddedId
	private Id id = new Id();
	@Column
	private Integer position;
	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "unmodifiedText",insertable = false,	updatable = false)
	private UnmodifiedText unmodifiedText;
	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "paragraph",insertable = false,	updatable = false)
	private Paragraph paragraph;
	
	public UnmodifiedText_Paragraph(){
		super();
	}

	public UnmodifiedText_Paragraph(Paragraph paragraph, Integer position,
			UnmodifiedText unmodifiedText) {
		super();
		this.paragraph = paragraph;
		this.position = position;
		this.unmodifiedText = unmodifiedText;
		this.id.paragraph = paragraph.getId();
		this.id.unmodifiedText = unmodifiedText.getId();
		
		paragraph.getUtp().add(this);
		unmodifiedText.getUtp().add(this);
	}

	public Integer getPosition() {
		return position;
	}

	public void setPosition(Integer position) {
		this.position = position;
	}

	public UnmodifiedText getUnmodifiedText() {
		return unmodifiedText;
	}

	public void setUnmodifiedText(UnmodifiedText unmodifiedText) {
		this.unmodifiedText = unmodifiedText;
	}

	
	public Paragraph getParagraph() {
		return paragraph;
	}

	public void setParagraph(Paragraph paragraph) {
		this.paragraph = paragraph;
	}	
	
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JPA Cascade: Entity nur speichern, wenn sie nicht schon existiert Data Tier 0
A Cascade.All greift nur nach Jetty bzw. Tomcat neustart Data Tier 4
A JPA Cascade Types Data Tier 4
S OneToOne Beziehung erzeugt not marked cascade PERSIST Data Tier 1
N Problem beim initialisieren des Caches Data Tier 0
S JPA Problem mit Cascading Data Tier 1
M Eclipse 4 RCP Hibernate Problem Data Tier 3
C JPA FetchType.LAZY, Relation @OneToMany und Problem mit dem update Data Tier 1
K Problem mit EJBs und Transaktionen Data Tier 0
G JPA: Entity Klasse @JoinColumns Problem Data Tier 2
M JPA Problem: java.sql.SQLSyntaxErrorException: Data Tier 7
H Hibernate Problem mit Lazy Loading bei @OneToMany Collections Data Tier 5
M MySql und JPA-Timestamp Problem Data Tier 8
J Hibernate Problem bei Master-Detail-Tabellen Data Tier 5
A JPA - ManyToMany Problem - keine Unique Mehrfachzuweisungen Data Tier 4
M Problem beim Laden von Objekten, die von anderen Applikationen in eine DB eingefügt wurden Data Tier 5
M Problem mit @Temporal Mapping und SQL Server Data Tier 3
P JPA - HashMap mit Many-to-Many Relation Problem Data Tier 4
B Problem mit @ManyToMany und CascadeType.ALL Data Tier 3
Blackskyliner [JPA][Anfänger] Problem mit Wertzuweisung aus Verbundtabelle Data Tier 2
B Problem mit org.hibernate.LazyInitializationException Data Tier 11
B DatenquellenUpdater extends Thread - Problem mit PermGenSpace Data Tier 5
S Problem beim Insert mit Hibernate Data Tier 9
Y [openJPA] Problem mit Transaktion? Data Tier 2
A @SecondaryTable Problem Data Tier 9
N Problem beim session.flush(); Data Tier 17
Y Postgres und JPA - Primärschlüssel Problem Data Tier 3
P SQL PRoblem Hibernate? Data Tier 8
Y EJB Problem mit Transaktionen Data Tier 7
M Transaction / Session Problem Data Tier 4
G JPA 2.0 Query Problem Data Tier 3
P CORBA Problem bei EJB 3.0 Anwendung in Glassfish v3 Data Tier 7
F Problem mit Hibernate Schema Update Data Tier 2
S Lazy loading Problem Data Tier 2
M Insert-Problem mit JPA/Hibernate Data Tier 4
megachucky JPA - Problem mit Persistence Unit / Context Data Tier 1
H Hibernate Problem Data Tier 4
D Performance Problem mit Prepared Statement Data Tier 6
T Problem mit openJPA Data Tier 7
P Problem mit Data Tier 9
C JPA Problem mit attributeOverride und mehrspaltigem PK Data Tier 2
B select "neu" statement Problem (jpql) Data Tier 8
boxi Hibernate Lazy Loading Problem Data Tier 2
M Problem mit Hibernate und SLF4J - NoSuchMethodException Data Tier 3
G Connection Problem - WAS 6.1, Hibernate, OS Authentication Data Tier 1
K Hibernate update-Problem Data Tier 36
J hibernate problem Data Tier 14
N Hibernate - Problem mit Update/Insert Data Tier 4
B Problem mit @PersistenceContext Data Tier 4
G Problem with mapped of the tables at one to one relationship Data Tier 8
I Hibernate / JPA: Eine Datenbank und pro User ein Schema Data Tier 9
T Hibernate/Spring JPA: eigene ID generieren Data Tier 5
Avalon @ManyToOne Hibernate oder JPA? Data Tier 5
D Hibernate Hibernate mit MariaDB Data Tier 1
ToBJo Hibernate Glassfish deploy mit Hibernate schlägt fehl Data Tier 1
C JPA Hibernate Map<String,String> richtig mappen Data Tier 2
S JPA Hibernate Search & EclipseLink (oder OpenJPA) Data Tier 0
R JPA Probleme mit Wechsel von EclipseLink auf Hibernate Data Tier 4
ARadauer Hibernate Entität readonly laden... Data Tier 1
G Hibernate SQL in Hibernate: Keine Parameter mit Index? Data Tier 2
P Wildfly + Hibernate + SQL Server Data Tier 0
E JPA Hibernate Query mit Timestamp hat seltsames Verhalten Data Tier 1
C Hibernate ProgressBar updaten mit Daten aus Hibernate Data Tier 4
B Hibernate und MySQL testen Data Tier 8
I Hibernate HQL: generiertes SQL ausgeben Data Tier 1
R mapping-file für hibernate zum Überschreiben der Annotationen Data Tier 7
R Hibernate Hibernate und Logback Data Tier 2
R Hibernate möchte Schema zwei mal undeployen Data Tier 2
F Hibernate Hibernate / JPA Data Tier 4
E Hibernate: Session vs EntityManager Data Tier 3
C Hibernate Hibernate Code Generation Data Tier 3
S Hibernate Mehrfachverbindung mit Hibernate Data Tier 3
M Hibernate Einstiegsfrage Data Tier 5
M Exception in thread "main" org.hibernate.MappingException: java.lang.ClassNotFoundException: Message Data Tier 4
S Hibernate Einstieg in Hibernate 3.2 sinnvoll? Data Tier 8
P JPA Eigene Vererbungsstrategie mit JPA / Hibernate Data Tier 2
Y Jboss seam-hibernate-jpa Data Tier 5
RaoulDuke Hibernate Map<String,String> mit Annotations mappen Data Tier 2
M Hibernate Hibernate with GWT Data Tier 4
C Hibernate JPA mysql db erstellen Data Tier 4
M Hibernate Hibernate liest Daten zu oft aus! Data Tier 16
pg1337 Hibernate Fragen Data Tier 11
D Probleme bei Left Joins mit Hibernate createCriterias() Data Tier 2
D Hibernate probleme mit Verlinkungstabelle Data Tier 4
2 Hibernate Annotations Data Tier 7
G Hibernate select update no wait Data Tier 8
Z Hibernate: Many-To-Many nur eine bestimmte Spalte Data Tier 3
K Hibernate - Envers - Erzeugung der SQL Skripte Data Tier 4
G Hibernate 1:n Beziehung mit Vererbung Data Tier 5
D Hibernate-Criteria-API (Projections und MAX-Funktion) Data Tier 6
L Hibernate: failed to lazily initialize a collection of role Data Tier 3
S Hibernate hibernate.cfg.xml Data Tier 14
D JPA vs Hibernate.cfg und Entitymanager Data Tier 6
H Hibernate - Mapping für Enumeration Data Tier 1
R Hibernate Criteria Abfrageproblem Data Tier 2
A Hibernate und jdbc zusammen Data Tier 4
D Mit Hibernate aus JUnit ein DB-Schema erzeugen Data Tier 6
S [Hibernate] No Persistence provider for EntityManager Data Tier 5
G Hibernate HQL und Interface Data Tier 4
G JSF Hibernate no session or session was closed Data Tier 12

Ähnliche Java Themen


Oben