比如有职员表,包含国籍信息,还有一个记录所有国家名称的基础表
职员表 国家表
--------------------- ----------------------
id name country id name
--------------------- ----------------------
01 张三 01 01 中国
02 李四 02 02 美国
--------------------- ----------------------而显示时希望显示职员的国家名,而不是作为外键的id
------------------------
张三 中国
李四 美国
------------------------以前没用过Hibernate这样的持久层框架,没有类似的经验
希望有经验的兄弟不吝赐教啊项目时间紧,请尽快啊。。
多谢多谢。。 :)
职员表 国家表
--------------------- ----------------------
id name country id name
--------------------- ----------------------
01 张三 01 01 中国
02 李四 02 02 美国
--------------------- ----------------------而显示时希望显示职员的国家名,而不是作为外键的id
------------------------
张三 中国
李四 美国
------------------------以前没用过Hibernate这样的持久层框架,没有类似的经验
希望有经验的兄弟不吝赐教啊项目时间紧,请尽快啊。。
多谢多谢。。 :)
如果需要,是one to one 还是many to one
最好能给个例子。。感觉书上将关联关系的都没有涉及到这个问题。。
郁闷啊。。
职员和国家用一对多 from 职员 as 别名 left join 别名.国家 返回一个Object数组
to3楼:如果使用object数组,不就丢掉了ORM的特点了吗??前台还需要对数据进行从新拼装
数据库:01 张三 01 -> 01 张三 02
数据库中变化无非是这样,
然后再用表单是时候,去数据遍历,get("用户类".class,用户id);
返回一个用户的对象,用户类.getXX()(将国家对象返回回来),既然是一对多,自然已经定义了国家对象在用户的po类中;
得到国家对象,然后一个getName()就解决了,还有什么;
每次都是去数据库取,数据更新是没有问题的
<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对象更新掉。。
在查询一次太浪费资源了 :(