iteye_21093 2009-07-02 23:01
浏览 316
已采纳

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条回答

  • wanghaolovezlq 2009-07-09 16:52
    关注

    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属性啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作