Hi,
ich habe folgendes Problem.
Ich habe eine Tabelle Customer und eine Tabelle ContactPerson. Ein Kunde kann mehrere Ansprechpartner haben, aber ein Ansprechpartner kann nur einen Kunden haben. Löschen möchte ich aus beiden Richtungen, d.h. wenn ich den Kunden lösche sollen natürlich alle Ansprechpartner gelöscht werden. Wenn ich allerdings ein Ansprechpartner lösche soll nicht der Kunde gelöscht werden!
Das löschen des Kunden inkl. aller Ansprechpartner funktioniert wie gewollt. Jetzt habe ich ein Problem wenn ich ein Ansprechpartner lösche. Da in der Ansprechpartner Tabelle eine Referenz auf den Kunden existiert (wenn ich ein Ansprechpartner hole möchte ich auch wissen zu welchem Kunden dieser gehört) kann ich in der Tabelle ContactPerson kein Cascade nutzen um den Eintrag in der Tabelle die die beiden Tabellen verknüpft zu löschen da sonst der Kunde mitgelöscht wird.
Also die Frage wie lösche ich einen Ansprechpartner ohne den Kunden zu löschen? Allerdings möchte ich von dem Ansprechpartner auf den Kunden zugreifen und anders rum. Von dem Kunden auf den Ansprechpartner funktioniert noch nicht aber ich glaube das hat was mit dem Eager und Lazy Loading zu tun (versuche mich gerade mit Hibernate vertraut zu machen.. bin also recht unerfahren ???:L)
Oder sind die gesamten Verknüpfungen falsch?
Hier der Code:
ich habe folgendes Problem.
Ich habe eine Tabelle Customer und eine Tabelle ContactPerson. Ein Kunde kann mehrere Ansprechpartner haben, aber ein Ansprechpartner kann nur einen Kunden haben. Löschen möchte ich aus beiden Richtungen, d.h. wenn ich den Kunden lösche sollen natürlich alle Ansprechpartner gelöscht werden. Wenn ich allerdings ein Ansprechpartner lösche soll nicht der Kunde gelöscht werden!
Das löschen des Kunden inkl. aller Ansprechpartner funktioniert wie gewollt. Jetzt habe ich ein Problem wenn ich ein Ansprechpartner lösche. Da in der Ansprechpartner Tabelle eine Referenz auf den Kunden existiert (wenn ich ein Ansprechpartner hole möchte ich auch wissen zu welchem Kunden dieser gehört) kann ich in der Tabelle ContactPerson kein Cascade nutzen um den Eintrag in der Tabelle die die beiden Tabellen verknüpft zu löschen da sonst der Kunde mitgelöscht wird.
Also die Frage wie lösche ich einen Ansprechpartner ohne den Kunden zu löschen? Allerdings möchte ich von dem Ansprechpartner auf den Kunden zugreifen und anders rum. Von dem Kunden auf den Ansprechpartner funktioniert noch nicht aber ich glaube das hat was mit dem Eager und Lazy Loading zu tun (versuche mich gerade mit Hibernate vertraut zu machen.. bin also recht unerfahren ???:L)
Oder sind die gesamten Verknüpfungen falsch?
Hier der Code:
Java:
@Entity
public class Customer {
private int id;
private int customerID;
private String title;
private String company;
private String firstname;
private String lastname;
private Collection<ContactPerson> contactPerson = new ArrayList<ContactPerson>();
public Customer() {
}
@Id @GeneratedValue
public int getID() {
return id;
}
public void setID(int id) {
this.id = id;
}
public int getCustomerID() {
return customerID;
}
public void setCustomerID(int customerID) {
this.customerID = customerID;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getFirstName() {
return firstname;
}
public void setFirstName(String firstname) {
this.firstname = firstname;
}
public String getLastName() {
return lastname;
}
public void setLastName(String lastname) {
this.lastname = lastname;
}
@OneToMany( cascade = CascadeType.ALL )
@JoinTable( name = "tbl_customer_contactPerson", joinColumns = @JoinColumn( name = "customer_id"), inverseJoinColumns = @JoinColumn( name = "contactperson_id") )
public Collection<ContactPerson> getContactPerson() {
return contactPerson;
}
public void setContactPerson(Collection<ContactPerson> contactPerson) {
this.contactPerson = contactPerson;
}
}
Java:
@Entity
public class ContactPerson {
private int id;
private Customer customer;
private String title;
private String firstname;
private String lastname;
public ContactPerson() {
}
@Id @GeneratedValue
public int getID() {
return id;
}
public void setID(int sqlID) {
this.id = sqlID;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@ManyToOne
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public String getFirstName() {
return firstname;
}
public void setFirstName(String firstname) {
this.firstname = firstname;
}
public String getLastName() {
return lastname;
}
public void setLastName(String lastname) {
this.lastname = lastname;
}
}