ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
914
914
EMPFEHLEN
-
Na hallo

Ich habe ein Problem, was mich etwas Wahnsinnig macht.
Ich habe 2 Entityklassen: IPAddress und Device
Ein Gerät soll eine IP-Adresse aus einem gegebenen Pool bekommen.
Ich habe in den Klassen folgende Variablen:
IPAddress:
Code :1 2
@OneToOne(mappedBy="ipAddress", cascade=CascadeType.ALL) private Device device;
Device:
Code :1 2
@OneToOne(optional=false, orphanRemoval=true) private IPAddress ipAddress;
Wenn ich jetzt eine Ausgabe mach, in der ich alle IPAdressen aufliste, die an einem Gerät hängen, funktioniert das zunächst wunderbar.
Wenn ich aber in meine Geräteübersicht gehe, die IP-Adresse eine Geräts änder und dann wieder alle belegten IP-Adressen anzeigen lasse, taucht zwar die neu zugewiesene IP-Adresse auf, aber das Gerät dazu nicht. Sprich die gemappte Variable wird nicht korrekt aktualisiert.
Meine Abfrage dafür sieht wie folgt aus:
Code :1 2 3
"SELECT ipAddress FROM IPAddress ipAddress " + "WHERE ipAddress.device is not null " + "ORDER BY ipAddress.ip";
In meiner JSF-Seite habe ich einen Output mittels Rendered-Attribut, welches prüft, ob ipAddress.device empty ist. Falls ja wird "frei" ausgegeben.
Die Abfrage erkennt, dass ein Gerät dran hängt, das Rendered-Attribut in der JSF-Seite, weiß davon aber nichts.
Meine Vermutung: Die Abfrage wird direkt an die Datenbank gesendet. In der JSF-Seite wird dagegen aber nur auf das Entity-Objekt zugegriffen, welches noch nicht aktualisiert wurde.
Gibt es eine Möglichkeit, dass die IP-Adresse mit aktualisiert wird? Ich nahm ja an, dass es mit dem cascade-Parameter funktioniert, aber das klappt leider auch nicht. Zumal ich mir nicht sicher bin, ob ich ihn an die richtige Variable in der richtigen Klasse gesetzt habe. Ging jedenfalls beides nicht.
Ein weiterer Punkt, der mich diesbezüglich wahnsinnig macht, ist die AbfrageWie gesagt, diese Abfrage gibt mir alle belegten IP-Adressen. Demzufolge müßte ja das Gegenteil, also:Code :1 2 3
"SELECT ipAddress FROM IPAddress ipAddress " + "WHERE ipAddress.device is not null " + "ORDER BY ipAddress.ip";
alle freien IP-Adressen zurückgeben....tut es aber nicht. Es kommt nur eine leere Liste zurück...jemand eine bessere Idee?Code :1 2 3
"SELECT ipAddress FROM IPAddress ipAddress " + "WHERE ipAddress.device is null " + "ORDER BY ipAddress.ip";
lg
-
Es ist so, dass die aktuelle Entity einmal geladen und dann im Cache für die weitere Verwendung abgelegt wird. Das kann man unter anderem unterbinden mit cache.evictAll(); oder man benutzt diverse Konfigurationen in der persistence.xml
Ich verweise deshalb auf das JEE6 Tutorial http://docs.oracle.com/javaee/6/tuto...etutorial6.pdf Seite 639-642
Ähnliche Themen
-
JPA/Hibernate: "mappedBy reference an unknown target entity property"
Von Tim Bureck im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 08.06.11, 06:50 -
org.xml.sax.SAXParseException: The reference to entity "id" must end with the ';'
Von Unicate im Forum JavaAntworten: 0Letzter Beitrag: 10.09.10, 00:46 -
Fragen zu: "Speicherverwaltung", "dynamische Arrays in Klassen"
Von busenbach im Forum C/C++Antworten: 6Letzter Beitrag: 23.08.07, 10:35 -
"On-the-Fly" neue Klassen erzeugen/verändern ohne "selbst" Bytecode zu manipulieren..
Von Thomas Darimont im Forum JavaAntworten: 0Letzter Beitrag: 07.06.05, 20:43 -
Übersicht über "alle" öffentlichen Konstanten "aller" Klassen
Von Thomas Darimont im Forum JavaAntworten: 0Letzter Beitrag: 14.02.05, 19:31





Zitieren
Login





