第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

獲取nativeQuery with table join result list into

獲取nativeQuery with table join result list into

qq_遁去的一_1 2023-05-17 17:34:51
我正在使用 postgress 開發(fā)一個(gè) spring boot 項(xiàng)目。我在將 jpa 本機(jī)查詢(使用表連接)結(jié)果列表解析為 JSONObject 時(shí)遇到問題我有兩張桌子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));表格中的示例數(shù)據(jù)insert into person values (1, 'A');insert into person values (2, 'B');insert into contacts values (1, 1, 'EMAIL', 'a@b.com');insert into contacts values (2, 1, 'PHONE', '123');insert into contacts values (3, 2, 'EMAIL', 'b@b.com');insert into contacts values (4, 2, 'PHONE', '456');使用本機(jī)查詢獲取數(shù)據(jù)的 Spring 引導(dǎo)代碼。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": "a@b.com"            },            {                "key": "PHONE",                "value": "123"            }        ]    },    {        "id": 2,        "name": "B",        "contacts": [{                "key": "EMAIL",                "value": "b@b.com"            },            {                "key": "PHONE",                "value": "456"            }        ]    }]或者結(jié)果應(yīng)該直接進(jìn)入 POJOList<Person> resultList = nativeQuery.getResultList();在這種情況下,我有一個(gè)帶有 @OneToMany 注釋的人員類和聯(lián)系人類。
查看完整描述

1 回答

?
不負(fù)相思意

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊

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

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 函數(shù)

您必須使用創(chuàng)建一個(gè) JSON 對(duì)象json_build_object()并將這些結(jié)果聚合到一個(gè)數(shù)組中json_agg()。兩次。

免責(zé)聲明:如評(píng)論中所述:在這種情況下,兩個(gè)表的簡單 JOIN 就可以將邏輯傳輸?shù)?Java 后端。我猜,因?yàn)槟褂玫氖?JPA,所以您只有實(shí)體管理器中的數(shù)據(jù)。因此,使用 Java 工具(例如gson)生成 JSON 對(duì)象將是比調(diào)用數(shù)據(jù)庫更好的選擇。但這當(dāng)然取決于您的用例和設(shè)置。


查看完整回答
反對(duì) 回復(fù) 2023-05-17
  • 1 回答
  • 0 關(guān)注
  • 195 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)