Ich möchte nutzerrechte speichern. Dabei ordne ich die Rechte aus einer Tabelle (mögliche Rechte) den Nutzer zu. Wenn ich den Nutzer speicher heißt dies, die alten Rechte zu löschen und die neuen dann dafür an zu fügen. Da ich per RMI arbeite ist das ein klein wenig komplizierter. Hier mal der Code für die betreffende Funktion
genau bei der persist anweisung kommt folgende Exception: deleted object would be re-saved by cascade (remove deleted object from associations). Wie krieg ich die weg. Da scheint es irgendwelche beziehungen zu geben. Achja interessant wäre noch die Nutzer Klasse
Es hat auch ziemlich sicher was mit den Cascade zu tun. Aber ich weiss nicht wie ichs weg krieg.
Java:
public void updateNutzer(TONutzer nutzer)
{
Nutzer dbNutzer = (Nutzer)this.getHibernateTemplate().load(Nutzer.class, nutzer.getId());
//Alte Rechte löschen
for (Nutzerrechte nr : dbNutzer.getNutzerrechtes())
{
this.getHibernateTemplate().delete(nr);
}
//Daten mappen
DozerMapper.get().mapper().map(nutzer, dbNutzer);
Set<Nutzerrechte> nrs = new HashSet<Nutzerrechte>();
//Neue Rechte einfügen
for ( TONutzerrechte tonr : nutzer.getNutzerrechtes())
{
Rechte r = (Rechte)this.getHibernateTemplate().get(Rechte.class, tonr.getRechteId());
if ( r == null)
{
classlogger.error("Fehler beim laden eines Rechtes: " + tonr.getKuerzel());
throw new RuntimeException("Fehler beim laden eines Rechtes zum einfügen");
}
Nutzerrechte nr = new Nutzerrechte();
nr.setRechte(r);
//nr.setNutzer(dbNutzer);
nrs.add(nr);
}
dbNutzer.setNutzerrechtes(nrs);
this.getHibernateTemplate().persist(dbNutzer);
}
genau bei der persist anweisung kommt folgende Exception: deleted object would be re-saved by cascade (remove deleted object from associations). Wie krieg ich die weg. Da scheint es irgendwelche beziehungen zu geben. Achja interessant wäre noch die Nutzer Klasse
Es hat auch ziemlich sicher was mit den Cascade zu tun. Aber ich weiss nicht wie ichs weg krieg.
Java:
/**
* Nutzer generated by hbm2java
*/
@Entity
@Table(name = "nutzer", catalog = "werkstatt")
public class Nutzer implements java.io.Serializable {
private static final long serialVersionUID = 7807238723394297155L;
private Integer id;
private String nutzername;
private String password;
private boolean isadmin;
private String vorname;
private String nachname;
private Set<Nutzerrechte> nutzerrechtes = new HashSet<Nutzerrechte>(0);
public Nutzer() {
}
public Nutzer(String nutzername, String password, boolean isadmin) {
this.nutzername = nutzername;
this.password = password;
this.isadmin = isadmin;
}
public Nutzer(String nutzername, String password, boolean isadmin,
String vorname, String nachname, Set<Nutzerrechte> nutzerrechtes) {
this.nutzername = nutzername;
this.password = password;
this.isadmin = isadmin;
this.vorname = vorname;
this.nachname = nachname;
this.nutzerrechtes = nutzerrechtes;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "nutzername", nullable = false, length = 45)
public String getNutzername() {
return this.nutzername;
}
public void setNutzername(String nutzername) {
this.nutzername = nutzername;
}
@Column(name = "password", nullable = false, length = 50)
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
@Column(name = "isadmin", nullable = false)
public boolean isIsadmin() {
return this.isadmin;
}
public void setIsadmin(boolean isadmin) {
this.isadmin = isadmin;
}
@Column(name = "vorname", length = 45)
public String getVorname() {
return this.vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
@Column(name = "nachname", length = 45)
public String getNachname() {
return this.nachname;
}
public void setNachname(String nachname) {
this.nachname = nachname;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "nutzer", cascade={CascadeType.ALL})
public Set<Nutzerrechte> getNutzerrechtes() {
return this.nutzerrechtes;
}
public void setNutzerrechtes(Set<Nutzerrechte> nutzerrechtes) {
this.nutzerrechtes = nutzerrechtes;
}
}