2016-06-18 15 views
1

私はPostgreSQLを使用しており、私はこれらのテーブル、アドレス、会社との関係OneToMany関係を持っています。私は、それぞれが企業のリストを含んでいるアドレスのリストを検索したい。私はこれらの2つのテーブル間の結合を実現し、私は下のデータを取得した:このクエリを実行するとOneToManyマッピングJSONへのPOJO Spring

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); 

私はこのテーブルを検索し、私は以下のようにJSON形式でそれをマップしたい:

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"; 

結果をエレガントな方法で以下の形式に変換する方法をご存知ですか?

POJO:

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

ShopObjクラス:

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

JSONデータ:

{ 
    "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" 
      } 
     ] 
     } 
    ] 
} 

答えて

0

私は以下のコードを実装して私のケースで働いていましたが、私のデータをマッピングする自動方法があるかどうか知っていますか?

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

確かに。

  1. は、あなたの行througキー
  2. 反復として値としてのPOJO、およびそのIDを含む、空のMap<Long, POJO>を作成します。
  3. 各行について、POJO IDを取得し、対応するPOJOをマップから取得します。マップにまだない場合は、POJOを作成してマップに追加します
  4. 現在の行のショップを作成し、前のステップで取得または作成したPOJOのショップリストに追加します
  5. 最後に、マップのvalues()はJSONにシリアル化するCollection<POJO>です。
関連する問題