JPQL Neues Objekt in Select-Anweisung erstellen - vermeiden oder umarmen?
Ich habe gelernt, vor kurzem, dass es möglich ist, neue Objekte anzulegen, in JPQL
- Anweisungen wie folgt:
select new Family(mother, mate, offspr)
from DomesticCat as mother
join mother.mate as mate
left join mother.kittens as offspr
Ist das etwas, was vermieden werden oder eher, Sie zu umarmen? Wann ist die Verwendung dieser Funktion gerechtfertigt angesichts der guten Praktiken?
InformationsquelleAutor der Frage mgamer | 2010-03-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht vermeiden, es, WÄHLEN Sie die NEUE da ist, denn es gibt durchaus gültig Anwendungsfälle, wie es erinnert in der §10.2.7.2. JPQL Konstruktor-Ausdrücke in der SELECT-Klausel der EJB 3.0 JPA-Spezifikation:
Kurz gesagt, verwenden Sie die WÄHLEN Sie NEU, wenn Sie nicht möchten, dass zum abrufen einer vollständigen Einheit oder eine vollständige graph von Objekten in einer Art sicheren Weg (im Gegensatz zu einer
Object[]
). Ob Sie anzeigen das Ergebnis einer Abfrage in einer entity-Klasse oder eine nicht zugeordnete Klasse wird abhängen von Ihrem wählen. Ein typisches Beispiel wäre eine Liste mit Bildschirm (wo Sie vielleicht nicht möchten, dass alle details).In anderen Worten, verwenden Sie es nicht überall, aber nicht verbieten seinen Einsatz (ein paar Dinge sind nur schwarz oder weiß).
InformationsquelleAutor der Antwort Pascal Thivent
Oft verwenden Sie diese Art der Abfrage, wenn Sie abrufen möchten eine Data Transfer Object. Vielleicht kann ein Bericht sein, ein guter Ort, um es zu benutzen. Wenn Sie wollen einfach nur zum abrufen einer einzelnen Domäne-Objekt (wie von Familie statt), es gibt also keinen Grund, es zu benutzen.
InformationsquelleAutor der Antwort Arthur Ronald
Ein Objekt erstellt, mit den neuen nicht haben, um ein DTO, d.h. ein Objekt, welches exportiert werden soll, indem Sie die Business-Schicht. Es kann auch ein POJO-Domain-Objekt, d.h. ein Objekt wird intern von der Business-Schicht.
Den Grund für die Verwendung dieser Art von POJOs als partialobjekt, anstatt die volle JPA-Entity ist die Leistung bei bestimmten Arten von VERKNÜPFUNGEN. Eine große Ressource, die erklärt, das ist: http://use-the-index-luke.com/sql/join/hash-join-partial-objects
InformationsquelleAutor der Antwort gmournos