2017-02-03 5 views
0

Ich habe eine Tabelle namens "User and Review" in der Datenbank neo4j. müssen diese Daten von Federdaten neo4j bekommen. Hier möchte ich kein Modal bekommen. Aber ich brauche bestimmte Werte. Sie sind Id, Nachricht, Bewertung usw. Das Problem ist, wie diese benutzerdefinierten zurückgegebenen Werte aus Db zugeordnet werden. Bitte hilf mir dabei.Wie bekomme ich benutzerdefinierte Ergebnisse mit Federdaten jpa mit neo4j?

Die Beispielabfrage ist:

@Query("MATCH (from:User)-[r:REVIEWED]->(to:User) where r.eventId={0} return ID(r),r.message,r.rating,r.eventId,r.zimId,from.firstName,to.firstName") 
    public List<ReviewRelatioshipDto> getReviewsByEventIdAndId(Long eventId); 

Ausnahme:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/social] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: Scalar response queries must only return one column. Make sure your cypher query only returns one item.] with root cause 
java.lang.RuntimeException: Scalar response queries must only return one column. Make sure your cypher query only returns one item. 

Antwort

3

Es gibt zwei Optionen- man eine @QueryResult zu verwenden ist und daher ReviewRelationshipDto mit Anmerkungen versehen werden müssen und JavaBean Getter Konventionen oder Verwendung folgen @Property.

Die andere Option besteht darin, einfach eine Map mit Spalten und Werten Iterable<Map<String,Object>> zurückzugeben, wobei der Schlüssel der Spaltenalias und der Wert der Spaltenwert ist.

+0

Ich verwendete Abfrageergebnis. es hat für mich funktioniert. Vielen Dank. –

0

Was Luanne mit @QueryResult erwähnt, ist wahrscheinlich der Weg zu gehen. Wenn Sie jedoch ein alternatives Muster für den Umgang mit der Persistenzübersetzung in einem Ansichtsmodell wünschen, können Sie Ihr Domänenmodell (nicht Ihr DTO) mit den Federdaten neo4j füllen, wie Sie es normalerweise tun würden (in diesem Fall würde dies der Fall sein) sei etwas genannt ReviewRelationship). Sie hätten in diesem Layer keine DTOs durch das Spring Data Neo4j abgebildet.

Sie können dann die gewünschten Felder in Ihrem DTO auswählen. Sie können dies selbst tun, indem Sie das Domänenobjekt in einen DTO-Builder einspeisen, oder Sie können etwas von der Stange wie Model Mapper verwenden und dann an Ihre Ansicht übergeben, damit sie gerendert wird.

+0

Ich verwendete queryResult, das für mich arbeitete. –

Verwandte Themen