私は少し興味があります.既にマップされた子孫を持つルートエンティティのようなSQLクエリによる接続の結果を取得する方法はありますか. したがって、ベースに挿入すると、次のようになります。
insert into table test (id, parent_id, some_text) values
(1, null, 'a'),
(2, 1, 'b'),
(3, 1, 'c'),
(4, 2, 'd');
次に、SQLクエリによって
select *
from test t
start with t.id = 1
connect by prior t.id = t.parent_id
order siblings by t.some_text
私は手に入れます
id | parent_id | some_text
1 null a
2 1 b
4 2 d
3 1 c
およびエンティティ別
@Entity
@Table(name = "test")
public class Test {
@Id
@Column(name = "id")
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private BigInteger id;
@Column(name = "parent_id")
private BigInteger parent_id;
@Column(name = "some_text")
private String someText;
@OneToMany(mappedBy = "parent")
private Set<Test> descendants;
@ManyToOne
@JoinColumn(name = "parent_id")
private Test parent;
// getters and setters
}
テストのリストとして返されます。再帰関数によってルートと完全なツリーを取得することは可能ですが、繰り返しで新しいクエリを取得します (大きなツリーがあると非常に長くなります)。したがって、このクエリによって既にマップされた子孫を持つこのツリーのルートを取得する良い方法はありますか (おそらく、jdbc からエンティティへのマッピングを処理するクラス/インターフェイスを拡張/実装します)。