亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取nativeQuery with table join result list into

獲取nativeQuery with table join result list into

qq_遁去的一_1 2023-05-17 17:34:51
我正在使用 postgress 開發一個 spring boot 項目。我在將 jpa 本機查詢(使用表連接)結果列表解析為 JSONObject 時遇到問題我有兩張桌子create table person(  id           serial primary key,  name        varchar(50));create table contacts(  id serial primary key,  person_id int,  key   varchar(50),  value varchar(100),  foreign key (person_id) references person (id));表格中的示例數據insert into person values (1, 'A');insert into person values (2, 'B');insert into contacts values (1, 1, 'EMAIL', '[email protected]');insert into contacts values (2, 1, 'PHONE', '123');insert into contacts values (3, 2, 'EMAIL', '[email protected]');insert into contacts values (4, 2, 'PHONE', '456');使用本機查詢獲取數據的 Spring 引導代碼。String query = "select p.id, p.name, c.key, c.value from person p LEFT JOIN contacts c on p.id = c.person_id";Query nativeQuery = entityManager.createNativeQuery(query);List<Object[]> resultList = nativeQuery.getResultList();我想將輸出作為 JSONObject 的列表[{        "id": 1,        "name": "A",        "contacts": [{                "key": "EMAIL",                "value": "[email protected]"            },            {                "key": "PHONE",                "value": "123"            }        ]    },    {        "id": 2,        "name": "B",        "contacts": [{                "key": "EMAIL",                "value": "[email protected]"            },            {                "key": "PHONE",                "value": "456"            }        ]    }]或者結果應該直接進入 POJOList<Person> resultList = nativeQuery.getResultList();在這種情況下,我有一個帶有 @OneToMany 注釋的人員類和聯系人類。
查看完整描述

1 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

演示:db<>fiddle(本機查詢)

SELECT?

? ? json_agg(json_person)

FROM

? ? person p

JOIN (

? ? SELECT

? ? ? ? person_id,

? ? ? ? json_agg(json_contacts) AS contacts

? ? FROM

? ? ? ? contacts,

? ? ? ? json_build_object('key', key, 'value', value) as json_contacts

? ? GROUP BY person_id

) c

ON c.person_id = p.id,

json_build_object('id', p.id, 'name', p.name, 'contacts', c.contacts) AS json_person

文檔:Postgres JSON 函數

您必須使用創建一個 JSON 對象json_build_object()并將這些結果聚合到一個數組中json_agg()。兩次。

免責聲明:如評論中所述:在這種情況下,兩個表的簡單 JOIN 就可以將邏輯傳輸到 Java 后端。我猜,因為您使用的是 JPA,所以您只有實體管理器中的數據。因此,使用 Java 工具(例如gson)生成 JSON 對象將是比調用數據庫更好的選擇。但這當然取決于您的用例和設置。


查看完整回答
反對 回復 2023-05-17
  • 1 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號