# Hibernate Datensatz löschen



## casi91 (12. Dez 2011)

Hallo Leute.

Ich habe Folgendes Konstrukt:
Ein Auftrag kann einen oder mehrere Status haben.
Ein Status kann zu einem oder mehreren Aufträgen gehören

Das Datenbankdesign und die Klassen habe ich folgendermaßen erstellt:

Auftrag: ID, Bezeichnung
Status: ID,Bezeichnung
Auftragstatus: AuftragID, StatusID, erfasstAm

Das schreiben der Daten funktioniert auch wunderbar.
Mein Problem ist nun, dass wenn ich einen Auftrag löschen will, ich zuerst manuell die Auftragstati löschen muss.


```
...
		Criteria crit = session.createCriteria(AuftragStatus.class).add(Property.forName("myAuftrag").eq(auftrag));
		List<?> domainListe  = crit.list();
		for (int count=0; count < domainListe.size(); count++) {
			AuftragStatus aufstat = (AuftragStatus) domainListe.get(count);
			try {
				session.delete(filstat);
			}
			catch (Exception e) {
				System.out.printf(e.getMessage());
			}
		}
...
```
Das klappt ebenfalls.

Es ist meines erachtens aber umständlich.
Gibt es eine Möglichkeit das zu automatisieren?

Hier noch meine Javaklassen.

Status: (Auftrag ist ähnlich aufgebaut)

```
@Entity
@Table(name="STATUS")
public class Status {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) 
	@Column(name = "STATUSID")		
	private Integer statusID;
	
	@ManyToOne(fetch=FetchType.EAGER,cascade = CascadeType.PERSIST)
	@JoinColumn(name = "OBERSTATUSID", insertable=true, updatable=true)		
	private Status myStatus;
	
	@Column(name="BEZEICHNUNG")
	private String Bezeichnung;
	
	public Status() {
		
	}

	public Integer getStatusID() {
		return this.statusID;
	}

	public void setStatusID(Integer statusID) {
		this.statusID = statusID;
	}

	public Status getMyStatus() {
		return myStatus;
	}

	public void setMyStatus(Status myStatus) {
		this.myStatus = myStatus;
	}

	public String getBezeichnung() {
		return this.Bezeichnung;
	}

	public void setBezeichnung(String bezeichnung) {
		this.Bezeichnung = bezeichnung;
	}	
	
	@Override
	public String toString()
	{
		return this.getBezeichnung();
	}		
}
```

AuftragStatus:


```
@Entity
@Table(name="AUFTRAGSTATUS")
public class AuftragStatus implements Serializable {

	@Id
	@ManyToOne(fetch=FetchType.EAGER,cascade = CascadeType.PERSIST)
	@JoinColumn(name = "STATUSID", insertable=true, updatable=true)			
	private Status myStatus;
	
	@Id
	@ManyToOne(fetch=FetchType.EAGER,cascade = CascadeType.ALL)
	@JoinColumn(name = "AUFTRAGID", insertable=true, updatable=true)
	private Filiale myAuftrag;
	
	@Column(name = "ERFASSTAM")
	private Date erfasstam;
	
	public FilialStatus() {


	public Date getErfasstam() {
		return erfasstam;
	}

	public void setErfasstam(Date erfasstam) {
		this.erfasstam = erfasstam;
	}

	public Unterstatus getStatus() {
		return myStatus;
	}

	public void setMyStatus(Status myStatus) {
		this.myStatus = myStatus;
	}

	public Filiale getMyAuftrag() {
		return myAuftrag;
	}

	public void setMyAuftrag(Auftrag myAuftrag) {
		this.myAuftrag = myAuftrag;
	}

}
```


Hoffe das Problem ist verständlich und ihr könnt mir helfen 
Danke schonmal im vorraus.


----------



## SlaterB (14. Dez 2011)

Cascade=All sollte für Löschen sorgen wenn die Filiale gelöscht wird, 
vielleicht dort im Mapping noch anzupassen, falls die AuftragStati dort überhaupt gemappt sind, was evtl. nicht nötig ist,
aktuell passiert was genau wenn du nur die Filiale löschst? bleiben die AuftragsStati oder gibt es Exception?


----------



## casi91 (15. Dez 2011)

Hallo
erst mal danke für die Antwort =)

und das Thema hat sich mitlerweile erledigt (sorry, hatte vergessen es hier zu schreiben)
Hatte an anderer Stelle ein ähnliches Problem.
Siehe hier: http://www.java-forum.org/datenbankprogrammierung/128727-hibernate-n-m-mittels-zwischentabelle-bidirektionaler-zugriff.html

Es gab Exceptions und es lag an falscher Zuweisung und falschem mapping.


----------

