hibernate3.2 映射特殊映射问题.

我想做一个部门的实体类,想达到这样的目地,想用一个表完成上级部.还有他的下属部门!都在一个表里边映射.用递归办法去查询.
实体如下:
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视频做的一模一样,人家的能通过!!想知道结果

1个回答

private Organization parent;

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);

这些都要设置下parent属性啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐