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条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥20 有人知道怎么将vsi格式的图片文件,转换为svs格式的文件吗
      • ¥15 历史模拟法计算var实验报告
      • ¥15 白鲸算法优化K值的VMD分解出错
      • ¥20 写一个基于52单片机用hc-05蓝牙模块控制28BYJ-48步进电机进行旋转,在手机蓝牙串口输入1019电机转半圈,输入2038电机转一圈,输入0复位的代码吗
      • ¥15 求51单片机8位数码管计时器程序
      • ¥20 matlab识别螺母边缘
      • ¥15 python 6x6游戏加登录、记录系统
      • ¥100 基于做一个模拟智慧路灯
      • ¥15 ME21N 创建采购成功并且生成采购订单号,但显示“快件文档更新已取消”,SM13看错误提示为如下截图:
      • ¥30 android 集成fmod实现变声功能中遇到的问题