2016-06-18 9 views
1

Ich benutze PostgreSQL und ich habe diese Tabellen, Adresse und Firma mit Beziehung OneToMany auf Adresse zu Unternehmen. Ich möchte eine Liste von Adressen abrufen, die jeweils eine Liste von Unternehmen enthält. Ich setzte die zwischen diesen beiden Tabellen zu verbinden und ich holte die Daten unter:OneToMany Mapping POJO zu JSON Spring

Wenn diese Abfrage ausführen:

select ad.id,ad.geolocation, ca.id, ca.name_en, ca.name_el from 
address as ad right join company_address as ca on (ad.id = ca.address_id); 

ich diese Tabelle abgerufen und ich möchte es im JSON-Format abzubilden, wie unten:

1;"0101000020E6100000C006335CD3043840504BBDB89EC14140"; 6; "Petros"; 
1;"0101000020E6100000C006335CD3043840504BBDB89EC14140"; 12; "Shop3"; 
1;"0101000020E6100000C006335CD3043840504BBDB89EC14140"; 13; "Shop3"; 
7;"0101000020E6100000A03418D984063840D8DD978E94C14140"; 7; "Mike"; 
7;"0101000020E6100000A03418D984063840D8DD978E94C14140"; 14; "Shop5"; 
7;"0101000020E6100000A03418D984063840D8DD978E94C14140"; 15; "Shiop8"; 
9;"0101000020E6100000804127840E163840CC28965B5AC64140"; 10; "Shop2"; 
9;"0101000020E6100000804127840E163840CC28965B5AC64140"; 11; "Shop3"; 

Wissen Sie, wie Sie die Ergebnisse im unten stehenden Format auf elegante Weise konvertieren können?

POJO:

private Long id; 
private Geolocation geolocation; 
private List<ShopObj> shops; 

ShopObj Klasse:

class ShopObj{ 
    private Long id; 
    private String nameEn; 
} 

Json Daten:

{ 
    "code": "200", 
    "data": [ 
     { 
     "id": 1, 
     "geolocation": "0101000020E6100000C006335CD3043840504BBDB89EC14140", 
     "shops": [ 
      { 
      "id": 6, 
      "nameEn": "Petros" 
      }, 
      { 
      "id": 12, 
      "nameEn": "Shop3" 
      }, 
      { 
      "id": 13, 
      "nameEn": "Shop3" 
      } 
     ] 
     }, 
     { 
     "id": 7, 
     "geolocation": "0101000020E6100000A03418D984063840D8DD978E94C14140", 
     "shops": [ 
      { 
      "id": 7, 
      "nameEn": "Mike" 
      }, 
      { 
      "id": 14, 
      "nameEn": "Shop5" 
      }, 
      { 
      "id": 15, 
      "nameEn": "Shiop8" 
      } 
     ] 
     }, 
     { 
     "id": 9, 
     "geolocation": "0101000020E6100000804127840E163840CC28965B5AC64140", 
     "shops": [ 
      { 
      "id": 10, 
      "nameEn": "Shop2" 
      }, 
      { 
      "id": 11, 
      "nameEn": "Shop3" 
      } 
     ] 
     } 
    ] 
} 

Antwort

0

Ich implementierte den unten stehenden Code und arbeitete für meinen Fall, aber wissen Sie, ob es gibt und automatische Weg, um meine Daten abzubilden?

List<ProductTest> productTests = productRepository.getProductTest(); 
    Map<Long, ProductT> products = new HashMap<Long, ProductT>(); 
    for (ProductTest pt : productTests) { 
     ProductT productT = products.get(pt.getId()); 
     if (productT == null) { 
      productT = new ProductT(pt.getId(), pt.getNameEl(), new ArrayList<MediaT>()); 
      products.put(pt.getId(), productT); 
     } 
     MediaT mediaT = new MediaT(pt.getMediaId(), pt.getMultimediaPath()); 
     productT.getMediaList().add(mediaT); 
    } 
    return products.values(); 
1

Sicher.

  1. Erstellen Sie eine leere Map<Long, POJO>, die POJOs als Werte und ihre ID als Schlüssel
  2. Iterate throug Ihre Zeilen enthält.
  3. Für jede Zeile, erhalten Sie die POJO ID, und erhalten Sie die entsprechenden POJO von der Karte. Wenn es noch nicht in der Karte ist, erstellen Sie das POJO und fügen Sie es der Karte hinzu
  4. erstellen Sie einen Shop für die aktuelle Zeile, und fügen Sie den Shop der Liste der Shops der POJOs hinzu, die im vorherigen Schritt
  5. erstellt wurden Am Ende ist die Werte() der Karte die Collection<POJO>, die Sie zu JSON serialisieren möchten.