2012-09-07 105 views
1

我該如何映射表id | parent_id | name我的POJO類:的MyBatis - 映射樹數據結構

public class Node { 
    private Integer id; 
    private Integer parentId; 
    private String name; 
    private List<Node> children; 
    //getters and setters 
} 

我想根節點(PARENT_ID = NULL)與填充兒童名單列表。樹深度沒有限制。我想到的是這樣的:

<resultMap id="nodeResult" type="Node"> 
    <id property="id" column="id"/> 
    <result property="parentId" column="parent_id"/> 
    <result property="name" column="name"/> 
    <collection property="children" resultMap="nodeResult"/> 
</resultMap> 
<select id="selectNode" resultMap="nodeResult"> 
    SELECT * FROM NODE 
</select> 

我不知道在哪裏把限制兒童名單:ID = parentId的。我不想使用嵌套選擇

回答

0

沒有辦法讓任意深度的樹在ResultMap中自動填充。

數據庫特定解決方案是一個選項嗎?例如,使用PostgreSQL,您可以使用公用表表達式將數據選擇到可能適用於映射到樹中的ResultSet中。

否則你應該改變你的集合定義的結果映射來指向一個查詢來選擇孩子,可重複使用相同的結果映射來獲得遞歸行爲

+0

正如我在寫的問題,我不想要使用嵌套選擇,這可能會導致數百個查詢。我認爲最好的想法是選擇所有節點作爲扁平列表並使用java將其轉換爲樹。 – mm1