シンプルであるべきことをしようとしていますが、何かが欠けています。グループ化および順序付けされた階層データを返そうとしています。説明しようとするのではなく、写真を添付します...千の言葉の価値があると聞きました:
主な選択基準は article_id であるため、ハードコードされた値は適切ではないことに注意してください。次に、記事の最初の「ルート レベル」 article_comment_id の行に沿って並べられ、その後にそのサブノードが続き、次に「ルート レベル」の article_comment_id が続きます。およびそのサブノード。
サンプルのテーブルとデータを提供しているので、私が何を意味するかを理解できるようになります。
CREATE TABLE test_comment
(
article_comment_id bigserial NOT NULL,
article_id bigint NOT NULL,
parent_comment_id bigint,
comment text NOT NULL,
comment_depth integer,
CONSTRAINT test_comment_pkey PRIMARY KEY (article_comment_id )
)
INSERT INTO test_comment (article_comment_id, article_id, parent_comment_id, comment, comment_depth)
VALUES
(1, 100, 0, 'First Root Comment', 0)
,(5, 100, 0, 'Second Root Comment', 0)
,(2, 100, 1, 'Reply 1 to Root Comment', 1)
,(3, 100, 2, 'Reply 2 to Reply 1', 2)
,(4, 100, 3, 'Reply 3 to Reply 2', 3)
,(6, 100, 2, 'Reply 4 to Reply 1', 2)
,(7, 100, 5, 'Reply 5 to Second Root Comment', 1);
私はこれを試しましたが、適切な順序を提供しません:
with recursive comment_list(article_comment_id, parent_comment_id, comment, article_id) AS (
select c.article_comment_id, c.parent_comment_id, c.comment, c.article_id
from test_comment c
where article_id = 100
union
select c.article_comment_id, c.parent_comment_id, c.comment, c.article_id
from test_comment c, comment_list cl
where c.article_comment_id = cl.article_comment_id
)
select * from comment_list;
とにかく、このPostgreSQL固有のクエリをJPAで使用できますか?