Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches
unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist:
http://codekicker.de/fragen/themen/groovy.
Löschen bei einer 1 zu 1 Beziehung
cleo - 11.03.2008 15:33
Holla,
ich schon wieder. Hab mal wieder ein Problem mit dem lustigen Löschen. 2 Klassen die untereinander eine 1 zu 1 Beziehung haben.
Schaut so aus:
class Team {
.
.
.
Employee leader
static constraints = {
leader(blank:false)
}
}
class Employee{
String Name
.
.
.
}
Wenn ich das Team lösche, wird der Employee mit gelöscht. Warum das passiert ist klar. Nur.. wie kann ich das verhindern?
Jegliche versuche mit clear, removeFrom.. etc. etc. schlugen fehl. Selbst zusammengefriggelte Statements hat er auch nicht wirklich geschluckt. Hat jmd eine Idee?
Re: Löschen bei einer 1 zu 1 Beziehung
LaermTot - 11.03.2008 16:40
Kann es sein, dass du in deinem Employee ein
static belongsTo = [blup:Team]
hast ?? Falls dem so ist, ist dein beschriebenes Verhalten explizit erwünscht.
Gruß
Volgrr
Re: Löschen bei einer 1 zu 1 Beziehung
cleo - 12.03.2008 07:54
Naaa shit.. doch hast recht.. steht schon mit drin aber für eine andere Aufgabe.. Total verpeilt! Sorry..
Also dann erkläre ich nochmal richtg:
Ich hab 2 Klassen Employee und Team
class Employee {
String firstName
String lastName
static belongsTo = Team
static hasMany = [teams:Team]
Das belongsTo sollte eigentlich nur für das hasMany greifen.. eigentlich..
Team sieht dann so aus
class Team {
String teamName
Employee leader
Employee substitute
static hasMany = [employees:Employee]
hat jmd ne Idee, wie das funktioneren könnte, wenn ich n Team lösche, dass der Leader und Substitute nich mitgelöscht wird?
Für die hasMany hab ich folgenden Code eingebaut und das funktioniert auch super..
Delete-Funk.
def team = Team.get( params.id )
if(team) {
team.employees.each(){
def employee = Employee.get(it.id)
team.removeFromEmployees(employee)
}
team.refresh()
team.delete()
Re: Löschen bei einer 1 zu 1 Beziehung
panther - 12.03.2008 08:43
Probier mal das Folgende, ob es sich dann so verhält wie du willst:
class Team {
String teamName
Employee leader
Employee substitute
static hasMany = [employees:Employee]
static mappedBy = [employees:"team"]
}
class Employee {
String firstName
String lastName
Team team
static hasMany = [teams:Team]
}
Re: Löschen bei einer 1 zu 1 Beziehung
cleo - 12.03.2008 09:23
hmmm aber das kann doch gar nich funktionieren oder?
Datenbanktechnisch würde er mir dann doch einene FK für team bei employee anlegen und das wäre ja eher suboptimal.
Oder bin ich jetzt total neben der spur.. hmmmmmm
Re: Löschen bei einer 1 zu 1 Beziehung
cleo - 12.03.2008 10:31
ja mit den relationen bin ich mir immer nich so sicher :P
Datenbanktechnisch schaut das ja so aus
Employee
Team
Team_Employee
FK_Team
FK_Employee
Das wäre dann zumindest für die Teammitglieder quasi eine Many-To-Many Beziehung während
Leader und Substitute eine 1:1 darstellt
Ich hab jetzt das belongsTo in Team reingeschrieben und dann die relation mit clear() aufgelöst.
Scheint wie gewünscht zu funktionieren.
Ob das nu so ast rein ist.. bin ich mir nich sicher :P
Re: Löschen bei einer 1 zu 1 Beziehung
cleo - 12.03.2008 12:39
nu is doch wieder ein weiteres Problem aufgetaucht.. Die klassen sehen immo wie folgt aus:
class Employee {
String firstName
String lastName
static hasMany = [teams:Team]
static mapping = {...}
static constraints = {...}
class Team {
String teamName
Employee leader
Employee substitute
String description
static belongsTo = Employee
static hasMany = [employees:Employee]
static mapping = {...}
static constraints = {...}
Ich möchte nun das Team löschen und das sieht bei mir immo so aus
def delete = {
def team = Team.get( params.id )
if(team) {
team.employees.each(){
def benutzer = Employee.get(it.id)
benutzer.removeFromTeams(team)
//team.removeFromEmployees(benutzer) <- hat beides den gleichen effekt
}
team.delete()
Ansich gesehen macht er es auch so wie ich es möchte ABER nur dann, wenn das Team nur einen Employee hat. Sind mehrere Employees zugeordnet
schmeisst er das:
Message:
Caused by: java.util.ConcurrentModificationException
Class: TeamController
At Line: [23]
Code Snippet:
23: team.employees.each(){
24: def benutzer = Employee.get(it.id)
ne Idee, warum er diese Exception wirft? Was sie bedeutet weiss ich aber warum das so ist und wie es umgangen werden kann weiss ich nich.
Re: Löschen bei einer 1 zu 1 Beziehung
cleo - 12.03.2008 12:54
Hallo Tatti,
also das löschen geht ja jetzt zum teil.. immo hab ich ja jetzt probs wenn ich 1 team löschen möchte welches 2 employees (oder mehr) besitzt
Re: Löschen bei einer 1 zu 1 Beziehung
panther - 12.03.2008 13:43
Bist du sicher, dass bei team.delete() nicht automatisch die Beziehung zu den Employees aufgehoben wird, so dass du es also nicht per Hand vor dem löschen des teams machen musst?
Re: Löschen bei einer 1 zu 1 Beziehung
cleo - 12.03.2008 15:10
jap bin ich mir sicher
Diese Seite zeigt den Thread "Löschen bei einer 1 zu 1 Beziehung" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde.
codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks
wie das Grails-Framework retten können.
Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder
beantworten dir auf codekicker.de deine Frage!
Stelle jetzt eine Frage!
Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.