Halli Hallo.
Ich bin grad auf ein kleines Problem bzgl. der referentiellen Integrität gestoßen und weiss grad einfach nich weiter.
Mir ist bewusst, dass die Klassen vllt ungünstig gewählt sind und ein Besitzer auch mehrere Häuser haben kann, aber das ignoriere ich einfach mal.
In meiner main-methode erstelle ich mir jetzt folgendes Stück Code:
Nun musste ich festellen, dass ich einen StackOverFlowError bekomme.
Sobald ich dem o2 das h1 zuordnen möchte verläuft es in einer Dauerschleife und ruft aufgrund der referentiellen Integrität, bei der ich den vorherigen Besitzer/Haus entfernen möchte (jeweils Zeile 14 in Owner/House) immer wieder die setter auf.
Ich weiß nun nicht, wie ich das Problem elegant in den Griff bekommen soll. Ich hatte es erst mit einer lokalen Variable in den jeweiligen Settern gemacht und per this.owner/this.house die Attribute "manuell" auf null gesetzt.
Sollte irgendwer die Zeit haben sich das mal anzuschauen und einen kleinen Rat für mich haben, dann wäre ich sehr dankbar. Sollten noch irgendwelche Verständnisfragen auftauchen, dann bitte melden.
Ich bin grad auf ein kleines Problem bzgl. der referentiellen Integrität gestoßen und weiss grad einfach nich weiter.
Mir ist bewusst, dass die Klassen vllt ungünstig gewählt sind und ein Besitzer auch mehrere Häuser haben kann, aber das ignoriere ich einfach mal.
In meiner main-methode erstelle ich mir jetzt folgendes Stück Code:
Java:
public class Test {
public static void main(String[] args) {
Owner o1 = new Owner();
Owner o2 = new Owner();
House h1 = new House();
o1.setHouse(h1);
o2.setHouse(h1);
}
}
Sobald ich dem o2 das h1 zuordnen möchte verläuft es in einer Dauerschleife und ruft aufgrund der referentiellen Integrität, bei der ich den vorherigen Besitzer/Haus entfernen möchte (jeweils Zeile 14 in Owner/House) immer wieder die setter auf.
Ich weiß nun nicht, wie ich das Problem elegant in den Griff bekommen soll. Ich hatte es erst mit einer lokalen Variable in den jeweiligen Settern gemacht und per this.owner/this.house die Attribute "manuell" auf null gesetzt.
Sollte irgendwer die Zeit haben sich das mal anzuschauen und einen kleinen Rat für mich haben, dann wäre ich sehr dankbar. Sollten noch irgendwelche Verständnisfragen auftauchen, dann bitte melden.
Java:
public class House {
private Owner owner;
public Owner getOwner() {
return this.owner;
}
public void setOwner( Owner newOwner ) {
if ( this.getOwner() != newOwner ) { // Neuer Besitzer != altem Besitzer ?
if ( this.getOwner() != null ) { // Gibt es einen Vorbesitzer ?
this.getOwner().setHouse( null ); // referentielle Integrität -> Altes Haus entfernen
}
this.owner = newOwner; // Haus wird neuer Besitzer übergeben
if ( this.getOwner() != null ) { // Neuer Besitzer != null
this.getOwner().setHouse( this ); // referentielle Integrität -> Besitzer wird (neues) Haus übergeben
}
}
}
}
Java:
public class Owner {
private House house;
public House getHouse() {
return this.house;
}
public void setHouse( House newHouse ) {
if ( this.getHouse() != newHouse ) { // Altes Haus != neuem Haus ?
if ( this.getHouse() != null ) { // Besitzt bereits ein Haus ?
this.getHouse().setOwner( null ); // referentielle Integrität -> Alten Vorbesitzer entfernen
}
this.house = newHouse; // Besitzer wird neues Haus übergeben
if ( this.getHouse() != null ) { // Neues Haus != null ?
this.getHouse().setOwner( this ); // referentielle Integrität -> Haus wird (neuer) Besitzer übergeben
}
}
}
}