OneToMany将POJO映射到JSON Spring

时间:2016-06-18 13:58:09

标签: java json postgresql spring-boot mapping

我使用PostgreSQL,我将这些表,地址和公司与OneToMany关系发布到公司地址。我想检索一个地址列表,每个地址都包含一个公司列表。我实现了这两个表之间的连接,我检索了下面的数据:

执行此查询时:

echo $?
0

我检索了这个表,我想用JSON格式映射它,如下所示:

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

您知道如何使用优雅的方式以下面的格式转换结果吗?

POJO:

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

ShopObj课程:

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

Json数据:

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

2 个答案:

答案 0 :(得分:1)

不确定

  1. 创建一个空的Map<Long, POJO>,其中包含POJO作为值,其ID为键
  2. 通过你的行迭代。
  3. 对于每一行,获取POJO ID,并从地图中获取相应的POJO。如果它还没有在地图中,请创建POJO并将其添加到地图
  4. 为当前行创建商店,并将商店添加到上一步获得/创建的POJO商店列表
  5. 最后,地图的值()是您要序列化为JSON的Collection<POJO>

答案 1 :(得分: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();