2017-11-28 6 views
-1

Ich verwende Spring Repository-Schnittstellen sehr. Eins funktionierte gut für mich, aber dann erkannte ich, dass ich ein bisschen mehr davon brauchte. Ich wollte eine weitere Ebene von get gehen()Spring Repository-Projektion Get Child eines Objekts

ich in einem Intranet arbeiten kann so nicht kopieren und einfügen, aber hoffentlich wird folgende genug Informationen geben, um es verständlich zu machen ...

@Entity 
@Table(name="person") 
class Person { 
    ... 
} 

@Entity 
@Table(name="requisite") 
class Requisite { 
    ... 
    @OneToOne 
    @JoinColumn 
    private Document document; 
} 

@Entity 
@Table(name="person_requisite") 
class PersonRequisite { 
    ... 
    @ManyToOne 
    @JoinColumn(name="person_id") 
    private Person person; 
    ... 
    @ManyToOne 
    @JoinColumn(name="requisite_id") 
    private Requisite requisite; 
    ... 
} 

@Projection(name="personRequisiteProjection", types={PersonRequisite.class}) 
public interface PersonRequisiteProjection { 
    ... 
    Person getPerson(); 
    Requisite getRequisite(); 
    ... 
} 

Hier i ist eine Darstellung von dem, was jetzt bin immer ...

"personRequisites" : [ { 
    ... 
    "requisite" : { 
    id : 1, 
    ... 
    no document object or document id from the requisite 
    }, 
    "person" : { 
    id : 33, 
    ... 
    }, 
    ... 
] 
... 

Hier ist eine Darstellung dessen, was ich will ...

"personRequisites" : [ { 
    ... 
    "requisite" : { 
    id : 1, 
    ... 
    "document" : { 
     "id" : 55, 
     "name" : blah, 
     ... 
    } 
    }, 
    "person" : { 
    id : 33, 
    ... 
    }, 
    ... 
] 
... 

Ich weiß, das ist nicht richtig, aber ich möchte im Grunde

@Projection(name="personRequisiteProjection", types={PersonRequisite.class}) 
public interface PersonRequisiteProjection { 
    ... 
    //i know, this would be out of place if it worked but trying to emphasize what i want... 
    Document getRequisite().getDocument(); 
    //i'd still want Requisite getRequisite() as well but you get what i am after 
    ... 

    //or more appropriately, force document to show up in Requisite here... 
    Requisite getRequisite(); 
    ... 
} 
+0

Kontrolle dieses bitte https://stackoverflow.com/questions/44554979/how-to-loop-and-retrieve-value-from- hateasas-link-attribute-zB-retrieve-a-des/44564464 # 44564464 –

+0

was für ein Witz. Auf der Suche nach einem Kind mit einer Federprojektion würde man wirklich zu dem Link führen, den Sie oben haben? etwas ist ernsthaft falsch mit Menschen. Sie sind Hasser. Gott wird sich um dich kümmern. – user2052618

Antwort

1
@Projection(name="personRequisiteProjection", types={PersonRequisite.class}) 
public interface PersonRequisiteProjection { 
    ... 
    @Value("#{target.requisite.document}") 
    Document getRequisite().getDocument(); 
    //i'd still want Requisite getRequisite() as well but you get what i am after 
    ... 

    //or more appropriately, force document to show up in Requisite here... 
    Requisite getRequisite(); 
    ... 
} 
+0

Das hat funktioniert! Eine kleine Sache ist, dass Sie nicht getRequisite(). GetDocument() von dem, was ich sagen kann, was in Ordnung ist. Just Document getDocument() und kommentieren Sie es wie Sie erwähnt haben. Also jetzt ist mein Problem zu viele Daten. Das Document-Objekt hat die Binärdatei des Dokuments und das kommt auch zurück. Ich muss wahrscheinlich nur die Teile des Dokuments, das ich möchte, mit der Value Annotation bekommen. Dies zeigt nur, dass wir das Dokument auf die Festplatte legen sollten und die Datenbank einen Zeiger auf das Dokument haben soll. Wir haben darüber diskutiert, aber zumindest jetzt nicht daran gedacht. – user2052618

+0

Ich fügte JsonIgnore zu dem Feld hinzu, das das Dokument binär hatte. also ist alles wieder großartig! Vielen Dank! – user2052618

+0

toll, du bist willkommen :) –

Verwandte Themen