Wie funktioniert ORM unter der Decke? Auch was ist der beste Weg, persistente Objekte in Java haben?
Frage
Wie funktioniert ORM arbeiten? Sind Objekte in BLOBs serialisiert?
In Java ist JDO immer noch der Weg für diese zu gehen? Was sonst noch zur Verfügung steht? Scheint, wie es war von EJB, direkte Objektserialisierung und JDO viel von sich reden.
Lösung
Ihre erste Frage zu beantworten, hier ist ein Auszug aus Hibernate , die besagen, dass es verschiedene Möglichkeiten zur Umsetzung ORM sind:
Reiner relationale
Die gesamte Anwendung, einschließlich der Benutzerschnittstelle, die ausgelegt ist um relationales Modell und SQL-basiertes relationale Operationen. Dieser Ansatz, trotz ihrer Mängel für große Systeme können eine ausgezeichnete Lösung sein für einfache Anwendungen, bei denen eine niedrige Niveau der Wiederverwendung von Code ist erträglich. Direkte SQL werden kann in jeder feinabgestimmt Aspekt, aber die Nachteile auf, wie beispielsweise Mangel an Portabilität und Wartbarkeit, sind signifikant, vor allem auf lange Sicht. Anwendungen dieser Kategorie häufig macht die starke Nutzung von Stored Procedures, Verschieben der einen Teil der Arbeit aus Business-Schicht und in die Datenbank.
Lichtobjektzuordnung
Entities werden als Klassen vertreten , die manuell auf die kartiert relationale Tabellen. Hand codierte SQL / JDBC wird von der Geschäftslogik verborgen mit bekannten Design-Patterns. Dieser Ansatz ist extrem weit verbreitet und erfolgreich für Anwendungen mit einer kleinen Anzahl von Einheiten, oder Anwendungen mit generischen, Metadaten gesteuerte Datenmodelle. Gelagert Verfahren könnte einen Platz in diesem hat Art der Anwendung.
Medium Objektzuordnung
Die Anwendung ist um ein entworfen Objektmodell. SQL erzeugt wird, an Zeit baut eine Codeerzeugung unter Verwendung von Werkzeug oder zur Laufzeit von Rahmencodes. Assoziationen zwischen Objekten sind durch die Persistenz unterstützten Mechanismus und Abfragen können spezifiziert unter Verwendung einer objektorientierten Ausdruckssprache. Objekte sind durch die Persistenz-Schicht zwischengespeichert. EIN Sehr viele ORM Produkte und homegrown Persistenzschichten Träger mindestens Dieses Maß an Funktionalität. Es ist gut geeignet für mittelgroße Anwendungen mit einigen komplexen Transaktionen, insbesondere, wenn die Portabilität zwischen verschiedene Datenbankprodukte ist wichtig. Diese Anwendungen meist nicht gespeicherte Prozeduren verwenden.
Vollobjektzuordnung
Vollständige Objektzuordnung unterstützt anspruchsvolle Objektmodellierung: Zusammensetzung, Vererbung, Polymorphismus und „Persistenz von Erreichbarkeits“. Die Persistenz-Schicht implementiert transparent Persistenz; persistente Klassen erben nicht spezielle Basisklasse oder müssen eine spezielle Schnittstelle implementieren. Effiziente Fetching-Strategien (faul und begierig fetching) und Caching Strategien umgesetzt werden für die Anwendung transparent. Diese Funktionalitätsniveau kaum sein durch eine homegrown Beharrlichkeit erreicht Schicht-es ist äquivalent zu Monaten oder Jahre Entwicklungszeit. Eine Zahl von kommerziellen und Open-Source-Java ORM Werkzeuge haben dieses Niveau erreicht Qualität. Dieses Niveau entspricht der Definition von ORM wir in diese mit Buch. Schauen wir uns die Probleme sehen wir erwarten von einem Werkzeug gelöst werden, dass erreicht volle Objektzuordnung.
Andere Tipps
ORM = Object Relational Mapping, Attribute der Objekte sind Spalten in der realational Datenbank abgebildet. Das Mapping ist beliebig, so dass zu Blobs getan werden könnte, in der Praxis, was ist am nützlichsten, neigt dazu, natürliche Mappings -. Strings Varchars, int auf ganze Zahlen etc
JPA ist der richtige Ort für einen Standard für ORM zu suchen. JPA ersetzt den EJB CMP-Ansatz, der zu umständlich gefunden wurde. JPA ermöglicht es Ihnen, die Zuordnung als Java-Annotationen zum Ausdruck bringen und ermöglicht auch die Zuordnungen in configutration Dateien angegeben werden, wenn die Unterstützung multip [le Datenbanken letztere nützlich sein kann.
JPA hat eine Abfragesprache, so dass Sie Abfragen für Objektattribute konstruieren können.
JPA wird von den großen App Server-Herstellern unterstützt und auch durch Produkte wie Hibernate.
Ich fand JPA ziemlich nett, mit zu arbeiten, um so mehr als EJB CMP.
Ich würde empfehlen, noch EJB Session Beans -fassaden Transaktion mamangement und Sicherheit mit -. Der Annotation-basierten Ansatz macht EJB 3 Weg einfacher zu benutzen als EJB 2, minimaler Codierung Kopf
JDO ist eigentlich Standard ORM zu und stellt eine vollständigere eine Spezifikation als JPA (1 + 2). JPQL ist fokussierter auf RDBMS Konzepte und damit SQL nachahmt. JDOQL folgt Java-Syntax so wird mehr Objekt basiert. Hängt wenn Ihre Anwendung jemals von RDBMS gehen weg betrachtet wird. Wenn ja, dann ist JPA nicht der Weg zu gehen. Wenn es nur für RDBMS ist dann JPA ist auf jeden Fall eine Überlegung.
Ob Objekte in BLOBs serialisiert werden, hängt von der Konfiguration. Sie können die Typen für komplexe Objekt tun, wenn Sie wollen, aber dann werden sie nicht abfragbar sein. Wenn Sie statt sie in nativer Form bestehen bleiben, dann können Sie diese auch abfragen, was zu einem effizienteren Anwendungen.
- Andy (Datanucleus - JDO und JPA Persistenz)