Pojo:
private Integer formId; private String formName; private Integer formLevel; public Integer getFormId() { return formId; } public void setFormId(Integer formId) { this.formId = formId; } public String getFormName() { return formName; } public void setFormName(String formName) { this.formName = formName; } public Integer getFormLevel() { return formLevel; } public void setFormLevel(Integer formLevel) { this.formLevel = formLevel; } private Form parentFormInfo; // private Set<Form> childFormList=new HashSet(); public Form() { } public Form getParentFormInfo() { return parentFormInfo; } public void setParentFormInfo(Form parentFormInfo) { this.parentFormInfo = parentFormInfo; } public Set<Form> getChildFormList() { return childFormList; } public void setChildFormList(Set<Form> childFormList) { this.childFormList = childFormList; }
Form.hbm.xml:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping> <class name="Form" table="form"> <id name="formId" column="FormId"> <generator class="identity" /> </id> <property name="formName" column="FormName" /> <property name="formLevel" column="FormLevel" /> <many-to-one name="parentFormInfo" column="parentId"></many-to-one> <set name="childFormList" inverse="true" lazy="true" cascade="all"> <key column="parentId" /> <one-to-many class="Form" /> </set> </class> <sql-query name="queryAllParentFormByFormId"> <![CDATA[ with showtree(formid,parentid,formname,formlevel) as ( select top 1 formid,parentid,formname,formlevel from form f where f.formid=:formId union all select t.formid,t.parentid,t.formname,t.formlevel from form as t join showtree on t.formid=showtree.parentid ) SELECT formid,parentid,formname,formlevel FROM showtree order by parentid ]]> <return alias="f" class="Form"/> </sql-query> </hibernate-mapping>
Dao中:
List<Form> list = getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.getNamedQuery(queryName).setInteger("formId", formId); List<Form> l=query.list(); return l; } });