Interaktion mit EntityManager

Anwendungen rufen gewöhnlich zuerst eine ObjectGrid-Referenz und anschließend über diese Referenz ein Session-Objekt für jeden Thread ab. Session-Objekte können nicht von mehreren Threads gemeinsam genutzt werden. Es ist eine zusätzliche Methode im Session-Objekt verfügbar, die Methode "getEntityManager". Diese Methode gibt eine Referenz auf einen EntityManager für diesen Thread zurück. Die Schnittstelle "EntityManager" kann die Schnittstellen "Session" und "ObjectMap" für alle Anwendungen ersetzen. Sie können diese EntityManager-APIs verwenden, wenn der Client Zugriff auf die definierten Entitätsklassen hat.

EntityManager-Instanz über eine Sitzung anfordern

Die Methode "getEntityManager" ist in einem Session-Objekt verfügbar. Das folgende Codebeispiel veranschaulicht, wie eine lokale ObjectGrid-Instanz erstellt wird und wie der Zugriff auf EntityManager erfolgt. Einzelheiten zu allen unterstützten Methoden finden Sie in der Beschreibung der Schnittstelle "EntityManager" in der API-Dokumentation.

ObjectGrid og = 
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid("intro-grid");
Session s = og.getSession();
EntityManager em = s.getEntityManager();

Es besteht eine Eins-zu-eins-Beziehung zwischen dem Session-Objekt und dem EntityManager-Objekt. Sie können das EntityManager-Objekt mehrfach verwenden.

Entität persistent definieren

Eine Entität persistent zu speichern bedeutet, dass der Status einer neuen Entität in einem ObjectGrid-Cache gespeichert wird. Nach Aufruf der Methode "persist" befindet sich die Entität im Status "Verwaltet". Die Operation "persist" ist eine transaktionsorientierte Operation, und die neue Entität wird nach der Festschreibung der Transaktion im ObjectGrid-Cache gespeichert.

Jede Entität hat eine entsprechende BackingMap, in der die Tupel gespeichert werden. Die BackingMap hat denselben Namen wie die Entität und wird bei der Registrierung der Klasse erstellt. Das folgende Codebeispiel veranschaulicht, wie ein Order-Objekt mit Hilfe der Operation persist erstellt wird:
Order order = new Order(123);
em.persist(order);
order.setX();
...
Das Order-Objekt wird mit dem Schlüssel 123 erstellt, und das Objekt wird an die Methode "persist" übergeben. Sie können mit dem Ändern des Objektstatus fortfahren, bevor Sie die Transaktion festschreiben.
Wichtig: Das vorherige Beispiel enthält keine erforderlichen Transaktionsgrenzen, wie z. B. "begin" und "commit". Weitere Informationen finden Sie in Lernprogramm: Auftragsinformationen in Entitäten speichern .

Entität suchen

Sie können die Entität im ObjectGrid-Cache mit der Methode "find" suchen, indem Sie nach dem Speichern der Entität im Cache einen Schlüssel angeben. Diese Methode erfordert keine Transaktionsgrenzen, was für eine schreibgeschützte Semantik hilfreich ist. Das folgende Beispiel veranschaulicht, dass nur eine einzige Codezeile erforderlich ist, um die Entität zu suchen.
Order foundOrder = (Order)em.find(Order.class, new Integer(123));

Entität entfernen

Die Methode "remove" ist wie die Methode "persist" eine transaktionsorientierte Operation. Das folgende Beispiel zeigt die Transaktionsgrenzen durch den Aufruf der Methoden "begin" und "commit" auf.

em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
em.remove(foundOrder );
em.getTransaction().commit();

Die Entität muss verwaltet sein, bevor sie entfernt werden kann. Sie können dies erreichen, indem Sie die Methode "find" innerhalb der Transaktionsgrenzen aufrufen. Rufen Sie anschließend die Methode "remove" in der Schnittstelle "EntityManager" auf.

Entität ungültig machen

Die Methode "invalidate" verhält sich ähnlich wie die Methode "remove", ruft aber keine Loader-Plug-ins auf. Verwenden Sie diese Methode, um Entitäten aus dem ObjectGrid zu entfernen, aber sie im Back-End-Datenspeicher beizubehalten.

em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
em.invalidate(foundOrder );
em.getTransaction().commit();

Die Entität muss verwaltet sein, bevor sie ungültig gemacht werden kann. Sie können dies erreichen, indem Sie die Methode "find" innerhalb der Transaktionsgrenzen aufrufen. Nach dem Aufruf der Methode "find" können Sie die Methode "invalidate" in der Schnittstelle "EntityManager" aufrufen.

Entität aktualisieren

Die Methode "update" ist ebenfalls eine transaktionsorientierte Operation. Die Entität muss verwaltet sein, damit Aktualisierungen angewendet werden können.

em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
foundOrder.date = new Date(); // Datum des Auftrags aktualisieren
em.getTransaction().commit();

Im vorherigen Beispiel wird die Methode "persist" nach der Aktualisierung der Entität nicht aufgerufen. Die Entität wird im ObjectGrid-Cache aktualisiert, wenn die Transaktion festgeschrieben wird.

Abfragen und Abfragewarteschlangen

Mit der flexiblen Abfragesteuerkomponente können Sie Entitäten über die Anwendungsprogrammierschnittstelle "EntityManager" abrufen. Erstellen Sie mit Hilfe der Abfragesprache von ObjectGrid Abfragen vom Typ SELECT über eine Entität oder ein objektbasiertes Schema. Unter "Abfrageschnittstelle" wird detailliert erläutert, wie Sie die Abfragen mit Hilfe der Anwendungsprogrammierschnittstelle "EntityManager" ausführen können. Weitere Informationen zur Verwendung von Abfragen finden Sie in der Dokumentation zur API "Query".

Eine Entitätsabfragewarteschlange ist eine warteschlangenähnliche Datenstruktur, die einer Entitätsabfrage zugeordnet ist. Sie wählt alle Entitäten aus, die der WHERE-Bedingung im Abfragefilter entsprechen, und reiht sie in eine Warteschlange ein. Anschließend können Clients interaktiv Entitäten aus dieser Warteschlange abrufen. Weitere Informationen finden Sie im Abschnitt Abfragewarteschlangen für Entitäten.