2016-12-01 2 views
1

ich JPA verwende, ich habe die Grund benannte Abfrage wie dieseJPA NamedQuery Wählen Sie bestimmte Spalte und Rückgabeklassentyp

@NamedQuery(name="Manifest.findAll", query="SELECT m FROM Manifest m") 

Als ich das nennen,

entityManager.createNamedQuery("Manifest.getManifestInfo").getResultList() 

ich das Objekt zurück in eine Liste wie diese

[{id:"1", name:"foo"},{id:"2", name:"bar"}] 

Aber dann habe ich eine andere benannte Abfrage, wo ich die Namen bekommen nur

@NamedQuery (name = "Manifest.getManifestName", query = "m.name FROM Manifest m SELECT")

Wenn ich diese Abfrage ausführen ich

[["foo"],["bar"]] 

bekommen Wie kann ich die zweite bekommen kann abfragen, um den Objekttyp so sein liek

[{name:"foo"},{name:"bar"}] 

ich diese einfacher gemacht zu zeigen, was ich versuche, hier zu tun, die eigentliche Tabelle mehr Spalten zurückgeben muß, aber es ist das gleiche Prinzip.

Wie kann ich den Objekttyp zurückgeben?

+0

Mögliche Duplikat [JPA Entity Attributnamen in generierten JSON fehlt] (http://stackoverflow.com/questions/27482835/jpa-entity-attribute-names-missing-in- generierte-json) – amishra

Antwort

0

Die Funktion für diesen Anwendungsfall in JPA ist eine Entity Graph.

definieren Sie es auf Ihrem Unternehmen wie folgt aus:

@NamedEntityGraph(name="nameOnly", attributeNodes={ 
    @NamedAttributeNode("name") 
}) 
@Entity 
public class Manifest { 
... 
} 

Sie Ihre Abfrage selbst unverändert lassen würde, aber das Entity Graph auf die Abfrage anwenden, bevor es entweder als Last oder eine Fetch Graph läuft (siehe Link für Erklärung):

EntityGraph<EmailMessage> eg = em.getEntityGraph("nameOnly"); 
entityManager.createNamedQuery("Manifest.getManifestInfo").setHint("javax.persistence.loadgraph", eg).getResultList() 
Verwandte Themen