2012-03-14 70 views
2

我有一個名爲「Area」的類。每個區域可以有多個子區域(相同類型)。使用休眠xml配置文件進行樹建模

我需要能夠確定子區域和根區域。子區域可以有自己的子區域。

這可能是相當深的幾個級別。

例子:

Rootarea 
|- Subarea 1 
| |- Subarea 2 
| | 
| |- Subarea 3 
| 
|- Subarea 4 
| |- Subarea 5 

public class Area { 

    private long id; 

    private Area parent; 
    private List<Area> children; 

    private String name; 

    //getters and setters here ommitted 
} 

如何模擬這樣一個Java類與Hibernate XML配置文件?

和...

如何加載到內存區域樹?

感謝

+0

你怎麼打算儲存於數據庫?所有在同一個表中? – ManuPK 2012-03-14 16:21:48

+0

是的,只是在'AREA'表中 – webmeiker 2012-03-15 07:44:53

回答

1
class Area 
{ 
    public Boolean isRootArea() 
    { 
     return getParent() == null; 
    } 
} 


    <class name="Area" table="`AREA`"> 
    <id name="Id"> 
     <generator class="..." /> 
    </id> 

    <bag name="children" cascade="all-delete-orphan"> 
     <key column="parent_id" /> 
     <one-to-many class="Area" /> 
    </bag> 
    <many-to-one class="Area" name="parent"> 
     <column name="parent_id" /> 
    </many-to-one> 
    </class> 


var rootareas = session.createCriteria(Area.class).add(Restriction.IsNull("parent")).setFetchMode("children", FetchMode.eager).list();