思考: 传入一个对象,获取该对像下的子目录。 注意:每个对象中都有不确定的子目录 例子: package shadowingfly; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Transient; //gf1袓父 f1父亲 f2父亲 c11小孩 c12小孩 c21小孩 c22小孩 @Entity public class Department { private int id; private String name; private boolean isRoot; private String description;// 备注 private Department parent; private Set<Department> children; // 通过Set将下级加入该实体 @OneToMany( mappedBy = "parent") public Set<Department> getChildren() { return children; } @ManyToOne @JoinColumn public Department getParent() { return parent; } public void setChildren(Set<Department> children) { this.children = children; } public void setParent(Department parent) { this.parent = parent; } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isRoot() { return isRoot; } public void setRoot(boolean isRoot) { this.isRoot = isRoot; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Transient public boolean isTransient() { return getId() < 1; } } 备注:添加Hibernate jar和Annotation jar包 测试类: package test; import java.util.Iterator; import java.util.List; import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; import shadowingfly.Department; public class T { /** * 要性能的话可以写成存储过程 */ public static void main(String[] args) { get(); } public static void get(){ EntityManagerFactory f = Persistence.createEntityManagerFactory("sample"); EntityManager em = f.createEntityManager(); em.getTransaction().begin(); Department departmentf = em.find(Department.class,2); getAllChildren(departmentf); em.getTransaction().commit(); em.close(); f.close(); } public static void getAllChildren(Department departmentf) { System.out.println(departmentf.getName()); Set<Department> set = departmentf.getChildren(); if(set.size()!=0){ for(Department d:set){ getAllChildren(d); } } } 备注:使用递归方式遍历子目录下的子目录 配置文件: <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="sample" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="root" /> <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test"/> </properties> </persistence-unit> </persistence> persistence.xml文件(记得修改连接方式)