Referentielle Integrität ? (Einfaches Bsp)

Schnuu

Mitglied
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:
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);
	}
}
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.

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
			}
		}
	}	
}
 

Natac

Bekanntes Mitglied
Typischer Fehler bei dieser Problemstellung. Dein Problem ist, das beide Klassen dafür verantwortlich sind, sich inder jeweils anderen korrekt einzutragen. Getreu dem Motte "Zwei Köche verderben den Brei."

Lösung: Nur eine Instanz macht die Änderungen, und zwar auf beiden Objekten. Ich würde dir folgende Schritte empfehlen:
1.) Für House und Owner jeweils eine protected-Methode, die das jeweilige Attribut nur setzt (ein ganz einfacher setter, könntest du bspw. [c]Owner.setHouseInternal(House h)[/c] nennen).
2.) Eine dritte Klasse, die die referentielle Integrität sicherstellt. Mit etwa einer Methode [c]set(House h, Owner o)[/c]
3.) Die normalen setter ([c]House.setOwner(Owner o)[/c] und [c]Owner.setHouse(House h)[/c]) rufen die in Schritt 2 erstellte Methode auf.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R OOP Einfaches Programmierbeispiel für Assoziation, Aggregation und Komposition gesucht Java Basics - Anfänger-Themen 10
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
J Einfaches Quadrat auf der Console ausgeben lassen Java Basics - Anfänger-Themen 7
H ein einfaches Tic Tac Toe Spiel Java Basics - Anfänger-Themen 1
L Einfaches Kartenspiel (Spieler Klasse) Java Basics - Anfänger-Themen 14
R Einfaches refresh während runtime Java Basics - Anfänger-Themen 4
M JSP-Einfaches Bild anzeigen Java Basics - Anfänger-Themen 4
F Einfaches Threadbeispiel.. Java Basics - Anfänger-Themen 7
G Erste Schritte Einfaches Gästebuch erstellen mit Array Java Basics - Anfänger-Themen 7
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
H Erste Schritte Einfaches Programm und GUI zusammen bringen Java Basics - Anfänger-Themen 3
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
B OOP einfaches regex Java Basics - Anfänger-Themen 10
K einfaches Drucken von Text (und ggf Bildern,gemischt) Java Basics - Anfänger-Themen 11
M Ganz einfaches Beispiel, finde den Fehler aber nicht :( Java Basics - Anfänger-Themen 2
S Einfaches Regulaerer Ausdruck Problem Java Basics - Anfänger-Themen 7
E einfaches Schachbrett generieren Java Basics - Anfänger-Themen 9
M Einfaches TicTacToe Programm Java Basics - Anfänger-Themen 19
S einfaches Pokerprogramm Java Basics - Anfänger-Themen 52
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
H einfaches Array -> ']' expected Java Basics - Anfänger-Themen 9
H Webservice - Einfaches Beispiel Java Basics - Anfänger-Themen 2
F Ich raffs nicht! - Wie mache ich ein einfaches Java-window? Java Basics - Anfänger-Themen 54
S Einfaches int Array gibt über System.out.println merkwürden Wert aus Java Basics - Anfänger-Themen 9
K Einfaches Bubblesort Java Basics - Anfänger-Themen 11
O einfaches rechnen mit zahlen Java Basics - Anfänger-Themen 4
H Einfaches Date-parse problem Java Basics - Anfänger-Themen 2
T Array auf einfaches Element umwandeln Java Basics - Anfänger-Themen 8
G einfaches Regex Problem Java Basics - Anfänger-Themen 4
M EInfaches Addieren mit Abbruchbedingung Java Basics - Anfänger-Themen 9
M [Einfaches Beispiel] Problem mit innere Klassen Java Basics - Anfänger-Themen 4
S Einfaches Rechenprogramm Java Basics - Anfänger-Themen 2
G Einfaches Rechenprogramm schreiben! Java Basics - Anfänger-Themen 8
A ausgabe eines arrays - einfaches beispiel Java Basics - Anfänger-Themen 4
M Einfaches Menü erstellen Java Basics - Anfänger-Themen 106
D was ist denn nun schon wieder? Einfaches JSP. Java Basics - Anfänger-Themen 6
D Ein einfaches Problem aber ich brauche einen TIP Java Basics - Anfänger-Themen 2
R einfaches Programm, viele Probleme Java Basics - Anfänger-Themen 29
C Einfaches Paint-Programm Java Basics - Anfänger-Themen 9
P Ein einfaches Spiel: TicTacToe. Fehler und Vorschläge Java Basics - Anfänger-Themen 3
F einfaches Menue in einer Textkonsole Java Basics - Anfänger-Themen 4
W einfaches Frame öffnen Java Basics - Anfänger-Themen 2
N Wahrscheinlich ganz einfaches Problem, aber unverständlich! Java Basics - Anfänger-Themen 3
S einfaches script mit Eingabeaufforderung starten (javac) Java Basics - Anfänger-Themen 8
B Einfaches Speichern und Laden in Java? Java Basics - Anfänger-Themen 3
L Einfaches Warten in eine Schleife Java Basics - Anfänger-Themen 9
P einfaches Perl-Skript aufrufen Java Basics - Anfänger-Themen 7
G einfaches jdialog beispiel Java Basics - Anfänger-Themen 1
B Oberflaecheprog einfaches beispiel (button action listener) Java Basics - Anfänger-Themen 5
N Vermutlich einfaches Problem.. Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben