Entity-Klassen - "Aktualisierung" + Abfage

Smoothi

Grünschnabel
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:
    @OneToOne(mappedBy="ipAddress", cascade=CascadeType.ALL)
    private Device device;

Device:
Code:
    @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:
"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 Abfrage
Code:
"SELECT ipAddress FROM IPAddress ipAddress "
                + "WHERE ipAddress.device is not null "
                + "ORDER BY ipAddress.ip";
Wie gesagt, diese Abfrage gibt mir alle belegten IP-Adressen. Demzufolge müßte ja das Gegenteil, also:
Code:
"SELECT ipAddress FROM IPAddress ipAddress "
                + "WHERE ipAddress.device is 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?

lg
 
Zurück