机构表,自我关联
CREATE TABLE `t_orgnization` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL DEFAULT NULL,
`level` INT(11) NULL DEFAULT NULL,
`belongTo` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `FK189DE7CFD11DC650` (`belongTo`),
CONSTRAINT `FK189DE7CFD11DC650` FOREIGN KEY (`belongTo`) REFERENCES `t_orgnization` (`id`)
)
public class Orgnization {
private Integer id;
private String name;
private Integer level;
private boolean hasChild;
private Orgnization belongTo;
private Set<Orgnization> children;
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.lohamce.hibernate">
<class name="Orgnization" table="t_orgnization">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<property name="level" />
<many-to-one name="belongTo" column="belongTo" />
<set name="children" lazy="extra" inverse="true" >
<key column="belongTo" />
<one-to-many class="Orgnization"/>
</set>
</class>
</hibernate-mapping>
@Test
public void testSaveOrgnizations(){
Session session = null;
Transaction tx = null;
Orgnization o1 = new Orgnization();
o1.setName("总行");
o1.setLevel(0);
Orgnization o2 = new Orgnization();
o2.setName("深圳分行");
o2.setLevel(1);
o2.setBelongTo(o1);
Orgnization o21 = new Orgnization();
o21.setName("宝山支行");
o21.setLevel(2);
o21.setBelongTo(o2);
Orgnization o22 = new Orgnization();
o22.setName("深南支行");
o22.setLevel(2);
o22.setBelongTo(o2);
Orgnization o3 = new Orgnization();
o3.setName("北京分行");
o3.setLevel(1);
o3.setBelongTo(o1);
Orgnization o31 = new Orgnization();
o31.setName("西单支行");
o31.setLevel(2);
o31.setBelongTo(o3);
Orgnization o32 = new Orgnization();
o32.setName("王府井支行");
o32.setLevel(2);
o32.setBelongTo(o3);
Orgnization o33 = new Orgnization();
o33.setName("雍和宫支行");
o33.setLevel(2);
o33.setBelongTo(o3);
try{
session = HibernateUtil.openSession();
tx = session.beginTransaction();
session.save(o1);
session.save(o2);
session.save(o21);
session.save(o22);
session.save(o3);
session.save(o31);
session.save(o32);
session.save(o33);
tx.commit();
} catch (Exception e){
e.printStackTrace();
tx.rollback();
} finally {
HibernateUtil.close(session);
}
}
此处需要将showsql注释掉,就可以看见树结构
@Test
public void testQueryOrgnization(){
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.openSession();
tx = session.beginTransaction();
Orgnization org = (Orgnization)session.load(Orgnization.class, 1 );
printBranch(org);
tx.commit();
} catch (Exception e){
e.printStackTrace();
if(tx != null) tx.rollback();
} finally {
HibernateUtil.close(session);
}
}
private void printBranch(Orgnization org){
if( org == null){
return;
}
Integer level = org.getLevel();
if(level > 0){
for(int i = 0 ; i < level; i ++){
System.out.print(" |");
}
System.out.print("--");
}
Set<Orgnization> children = org.getChildren();
int size = 0;
if(children != null){
size = children.size();
}
System.out.println(org.getName()+"["+size+"]");
if(children != null){
for ( Orgnization child : children ){
printBranch(child);
}
}
}