我想做一个部门的实体类,想达到这样的目地,想用一个表完成上级部.还有他的下属部门!都在一个表里边映射.用递归办法去查询.
实体如下:
public class Organization implements Serializable {
private static final long serialVersionUID = 7501283407841925933L;
private int id;
private String name;
private String sn;
private String description;
private Organization parent;
private Set<Organization> children;
}
set,get方法不写了,Organization parent这个属性做最上级部门,Set children属性做他下边的子部门
放到Set集合里边去!
hibernate3.2映射文件如下:
[b]<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
dynamic-insert="true" batch-size="3">
请问能不能在一个实体里自已做多对一映射,我做了测试能正确存到数据库中去,但是取的时候Set集合是NULL,就是关联不上.
但是我看人家Hibernate3.3做的视频就可以正确取出数据来,我用的是hibernate3.2版本,取不出来set集合的东西.
以下是做Juint单元测试:
public class OrgTest extends TestCase {
Session session=null;
public void testOrg1(){
try {
session=HibernateUtil.currentSession();
session.beginTransaction();
Set set= new HashSet();
Organization org2=new Organization();
org2.setName("软件开发部");
org2.setSn("2");
set.add(org2);
Organization org3=new Organization();
org3.setName("网络集成部门");
org3.setSn("3");
set.add(org3);
Organization org4=new Organization();
org4.setName("销售部门");
org4.setSn("4");
set.add(org4);
Organization org1=new Organization();
org1.setName("阳光科技有限公司");
org1.setSn("1");
//org1做为顶级部门把下级部门放到达Set集合里去;
org1.setChildren(set);
session.save(org1);
session.save(org2);
session.save(org3);
session.save(org4);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.beginTransaction().rollback();
}finally{
HibernateUtil.closeSession();
}
}
public void testOrgLoad(){
Session session=null;
try{
session=HibernateUtil.currentSession();
session.beginTransaction();
Organization org=(Organization) session.load(Organization.class,1);
System.out.println(" 顶级部门名字:"+org.getName()+";"+"set集合的大小:"+org.getChildren().size());
Set set=org.getChildren();
System.out.println(set.toString());
for(Organization org1 : set){
System.out.println(org1.getName());
}
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
HibernateUtil.rollbackTransaction();
}finally{
HibernateUtil.closeSession();
}
}
}
public void testOrg1()方法可以正确放入数据库,但是数据库里没有Pid关联,按上边的映射文件写的那样,应该Pid有关联的,但是数据库里没有?
public void testOrgLoad()方法看一看能不能把顶级部门的下级部门取出来,可以结果如下:
顶级部门名字:阳光科技有限公司;set集合的大小:0 其实我早就想到是这个结果了,因为Pid没有关联上当然取不出来值了!但是想问一问上边的实体映射能不能自己映射呢! 看人家hibernate3.3视频做的一模一样,人家的能通过!!想知道结果