Hibernate中主表如何关联基础表信息

yank1980 2008-12-01 11:55:27
比如有职员表,包含国籍信息,还有一个记录所有国家名称的基础表
职员表 国家表
--------------------- ----------------------
id name country id name
--------------------- ----------------------
01 张三 01 01 中国
02 李四 02 02 美国
--------------------- ----------------------

而显示时希望显示职员的国家名,而不是作为外键的id
------------------------
张三 中国
李四 美国
------------------------

以前没用过Hibernate这样的持久层框架,没有类似的经验
希望有经验的兄弟不吝赐教啊。。。项目时间紧,请尽快啊。。
多谢多谢。。 :)
...全文
98 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yank1980 2008-12-07
  • 打赏
  • 举报
回复
期待达人回复啊。。
yank1980 2008-12-07
  • 打赏
  • 举报
回复
现阶段方案是在职员表(主表)向国家表(基础表)设置为唯一外键关联,但国家表不关联职员表
<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="remark" type="java.lang.String">
<column name="remark" 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对象更新掉。。
在查询一次太浪费资源了 :(
然月枕流君 2008-12-03
  • 打赏
  • 举报
回复
code ?你的字段?

修改国籍,也是要递交到数据的,用session.update();
数据库:01 张三 01 -> 01 张三 02
数据库中变化无非是这样,
然后再用表单是时候,去数据遍历,get("用户类".class,用户id);
返回一个用户的对象,用户类.getXX()(将国家对象返回回来),既然是一对多,自然已经定义了国家对象在用户的po类中;
得到国家对象,然后一个getName()就解决了,还有什么;
每次都是去数据库取,数据更新是没有问题的
yank1980 2008-12-02
  • 打赏
  • 举报
回复
to2楼:使用关系关联后,如果用户修改了国籍。。下拉框只能提交code,即只修改了code,Hibernate怎么更新呢?不会影响到国家表吗?
to3楼:如果使用object数组,不就丢掉了ORM的特点了吗??前台还需要对数据进行从新拼装
yuanyon7 2008-12-02
  • 打赏
  • 举报
回复
设置两表之间的关系
职员和国家用一对多

from 职员 as 别名 left join 别名.国家

返回一个Object数组

然月枕流君 2008-12-02
  • 打赏
  • 举报
回复
一对多双向关联,便可以满足;
一个国家对应着多个人,多个人对应一个国家;
国家是一,人是多;

这样查询的时候以一的一方为主导,便可以的
yank1980 2008-12-01
  • 打赏
  • 举报
回复
这种情况下需要设置职员表和国家表的关联关系吗??
如果需要,是one to one 还是many to one
最好能给个例子。。感觉书上将关联关系的都没有涉及到这个问题。。
郁闷啊。。

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧