比如有职员表,包含国籍信息,还有一个记录所有国家名称的基础表
       职员表                     国家表
---------------------  ----------------------
id   name   country      id     name
---------------------  ----------------------
01   张三       01         01     中国
02   李四       02         02     美国
---------------------  ----------------------而显示时希望显示职员的国家名,而不是作为外键的id
------------------------
张三   中国
李四   美国
------------------------以前没用过Hibernate这样的持久层框架,没有类似的经验
希望有经验的兄弟不吝赐教啊项目时间紧,请尽快啊。。
多谢多谢。。 :)

解决方案 »

  1.   

    这种情况下需要设置职员表和国家表的关联关系吗??
    如果需要,是one to one 还是many to one
    最好能给个例子。。感觉书上将关联关系的都没有涉及到这个问题。。
    郁闷啊。。
      

  2.   

    设置两表之间的关系 
    职员和国家用一对多 from 职员 as 别名 left join 别名.国家 返回一个Object数组 
      

  3.   

    to2楼:使用关系关联后,如果用户修改了国籍。。下拉框只能提交code,即只修改了code,Hibernate怎么更新呢?不会影响到国家表吗?
    to3楼:如果使用object数组,不就丢掉了ORM的特点了吗??前台还需要对数据进行从新拼装
      

  4.   

    code ?你的字段?修改国籍,也是要递交到数据的,用session.update();
    数据库:01  张三   01  -> 01  张三  02
    数据库中变化无非是这样,
    然后再用表单是时候,去数据遍历,get("用户类".class,用户id);
    返回一个用户的对象,用户类.getXX()(将国家对象返回回来),既然是一对多,自然已经定义了国家对象在用户的po类中;
    得到国家对象,然后一个getName()就解决了,还有什么;
    每次都是去数据库取,数据更新是没有问题的
      

  5.   

    现阶段方案是在职员表(主表)向国家表(基础表)设置为唯一外键关联,但国家表不关联职员表
    <hibernate-mapping>
        <class name="hbm.test.dao.TPerson" table="t_person" schema="dbo" catalog="HibernateTest">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="assigned" />
            </id>
            <property name="name" type="java.lang.String">
                <column name="name" length="50" />
            </property>
            <property name="age" type="java.lang.Integer">
                <column name="age" />
            </property>
            <many-to-one name="country" class="hbm.test.dao.TCountry">
                <column name="country" />
            </many-to-one>
            <many-to-one name="title" class="hbm.test.dao.TTitle">
                <column name="title" />
            </many-to-one>
            <property name="re" type="java.lang.String">
                <column name="re" length="50" />
            </property>
        </class>
    </hibernate-mapping>
    修改了国家后,可以正常更新到数据库,但由于修改时只知道国家代码,不知道国名,故此时该职员的国籍对象只有code而没有name,必须要显示的session.refresh()一下才能重新读取新code对应的name,测试程序如下// 获得职员
    TPerson p = new TPersonDAO().findById(id);
    //设置新国籍(此时只知道国籍的code,不知道name,因为下拉菜单只传递code)
    p.setCountry(new TCountry(2));
    //修改后提交数据库
    new TPersonDAO().save(p);
    HibernateSessionFactory.getSession().getTransaction().commit();
    //如果不强制refresh,TCountry对象的name字段为空
    HibernateSessionFactory.getSession().refresh(p);
    不知道说明白没有。。
    就是想知道有没有其他办法,在save的同时就将TPerson对象更新掉。。
    在查询一次太浪费资源了 :(