anhand von anderen Threads kann man es erahnen; ich bastle gerade meine erste jpa(EclipseLink)-Anwendung. Aber "Application Managed". Mein Problem ist, zu wissen ob und wann ein Objekt "managed" ist und wann nicht. Und wann und warum es den Zusatnd des Objekt im Speicher hat und nicht den in der DB. (mein Thread http://www.java-forum.org/data-tier/102733-jpa-problem-aktualisierung-entities.html ist etwas zu speziell formuliert und kaschiert, das ich im Moment wohl noch grundsätzlichere Verständnissprobleme hab - wegen mir kann der gelöscht werden)
Am einfachsten wäre es für mich eine Möglichkeit zu kennen einen frischen Satz -Objekte aus der DB zu holen (den Status der Objekte im Speicher soll überschrieben werden).
Im Moment hab ich eine statische finde-Methode, die mir eine Liste von Objekten zurückgibt. Diese sind aber weder "managed" noch repräsentieren sie den aktuellen Stand in der DB. Die Methode sieht so aus:
Ein Indiz dafür das diese Methode alte (den Java Speicherstatus) Objekte zurückgibt, hab ich in meinem anderen Thread geschrieben: Ich hatte das anlegen von neuen Objeten in der DB falsch implementiert -eine Verknüpfung von Objekten vergessen und genau diese Verknüpfung hat auch in der Resultliste gefehlt.
Nun hab ich ein TimeStamp-Feld welches die DB bei insert automatisch setzt. Davon bekommt Java natürlich nix mit.
Wie implementiere ich eine "finde" Funktion die "aktuelle" Objekte zurückgibt? Wie gesagt ein refresh auf den Objekten des Arrays geht nicht da sie nicht "managed" sind und ein "merge" hilft auch nix. Eine möglichkeit wäre, ein explizites refresh für jedes Objekt der Resultliste zu machen - ist das wirklich nötig? -bzw. ist es unmöglich aktuelle Objekte aus der DB zu bekommen?
Am einfachsten wäre es für mich eine Möglichkeit zu kennen einen frischen Satz -Objekte aus der DB zu holen (den Status der Objekte im Speicher soll überschrieben werden).
Im Moment hab ich eine statische finde-Methode, die mir eine Liste von Objekten zurückgibt. Diese sind aber weder "managed" noch repräsentieren sie den aktuellen Stand in der DB. Die Methode sieht so aus:
Java:
public static Tabelle1[] findeEintraege(String OrdnungsnummerTeil){
EntityManager em = LokaleEntityManagerFactory.gibEMF().createEntityManager();
Query q = em.createQuery("SELECT urEintrag FROM Tabelle1 urEintrag WHERE urEintrag.ordnungsnummer LIKE '%"+OrdnungsnummerTeil+"'");
return (Tabelle1[])q.getResultList().toArray(new Tabelle1[0]);
}
Nun hab ich ein TimeStamp-Feld welches die DB bei insert automatisch setzt. Davon bekommt Java natürlich nix mit.
Wie implementiere ich eine "finde" Funktion die "aktuelle" Objekte zurückgibt? Wie gesagt ein refresh auf den Objekten des Arrays geht nicht da sie nicht "managed" sind und ein "merge" hilft auch nix. Eine möglichkeit wäre, ein explizites refresh für jedes Objekt der Resultliste zu machen - ist das wirklich nötig? -bzw. ist es unmöglich aktuelle Objekte aus der DB zu bekommen?