2017-04-26 4 views
0

Ich habe viele Spring-Entities, die alle gemeinsame Spalten teilen (erstellt, modifiziert). Jetzt habe ich erstellt eine @Embeddable Klasse, die diese Werte halten und ich legen sie jede Einheit mit@Embedded Spalten in Spring Entity

@Embedded 
private MyEmbeddedClass myEmbeddedClass; 

Alles funktioniert so weit in Ordnung. Nun, wenn ich locahost:8080/api/myEntity sehen Ich sehe meine Einheit und die Daten, die sie wie folgendes Beispiel gilt:

{ 
    "firstName" : "Jack", 
    "surname" : "London", 
    "myEmbeddedClass" : { 
    "created" : "2017-04-25T07:09:20.092+0000", 
    "modified" : null 
    }, 
    //links and stuff 
} 

So ist es wie eine verschachtelte json. Kann ich es "unnester" machen? :)

+0

Erstellen Sie ein separates DTO für Ihre Antwortklasse, und legen Sie die Felder manuell fest. –

Antwort

1

Anstatt eine @Embeddable zu verwenden, können Sie die allgemeinen Eigenschaften in einem @MappedSuperclass definieren. Ihre Entity-Klassen können dann davon ausgehen.

Das würde das gewünschte Ergebnis haben.

https://www.objectdb.com/api/java/jpa/MappedSuperclass

+0

Diese Antwort funktioniert perfekt. Vielen Dank! – JamesLinux

0

Die Lösung für Ihr Problem kann nicht direkt. Doch diese Möglichkeiten in Betracht ziehen:

  • eine Getter-Methode schreibt für getCreated() und getModified() [was auch immer die eingebetteten Felder] direkt an die Haupteinheit, die wie zurückgibt getId().getCreated()
  • eine Projektion schreiben [siehe @Projection] wie folgt vor:

@Projection (name = "extractedTimestamp", Typen = {Person.class})

interface ExtractedPersonTimestamp{ 

String getFirstName(); 
String getSurName(); 
String getCreated(); 
String getModified(); 
} 

@RepositoryRestResource(excerptProjection = ExtractedPersonTimestamp.class) 
interface PersonRepository extends CrudRepository<Person, PersonPK> {}//PersonPK assumed to be embedded class 

Ich habe das nicht versucht. Aber ich denke, das sollte eine Lösung geben.

Verwandte Themen