2012-03-14 68 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();