工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2371|回复: 15

大家认为这种情况Hibernate怎么做映射比较好

[复制链接]
发表于 2006-11-19 16:05 | 显示全部楼层 |阅读模式
下面的POJO就简化写成这样了:

A.java
private String id;
private String name;
private B b;
...........



B.java
pirvate String id;
private A a1;
private A a2; //a1,a2由于处在不同的环节中,其意义不一样。
 楼主| 发表于 2006-11-19 16:08 | 显示全部楼层

需要做成双向一对一FK关联

需要做成双向一对一FK关联
回复

使用道具 举报

发表于 2006-11-19 16:58 | 显示全部楼层
如果确定B中只有两个A,而且A代表的意义不同,可把两个A当作不同的类来写一对一的关系吗?
映射一对一双向关联时
A用 many-to-one
B用 one-to-one

纯属猜想,没实验过。
回复

使用道具 举报

 楼主| 发表于 2006-11-19 19:10 | 显示全部楼层

这样会报错的哦

<one-to-one name="b" property-ref="a1"/>
<one-to-one name="b" property-ref="a2"/>

A.java 中只有一个属性b ,如果出现两个one-to-one , name都是b的话肯定会报错(试验过了);
不知道有没什么映射描述是可以达到这样的功能的?

难道要把A写成两个内容相同 名字不同的类 才行?感觉这种写法有点傻傻的  呵呵
A1.java 和
A2.java


B.java
pirvate String id;
private A1 a1;
private A1 a2;
回复

使用道具 举报

发表于 2006-11-21 09:52 | 显示全部楼层
pirvate String id;
private A a1;
private A a2; //a1,a2由于处在不同的环节中,其意义不一样。


这里就很不明白为什么能做1对1PK关联了.
回复

使用道具 举报

发表于 2006-11-21 09:55 | 显示全部楼层
原帖由 深圳情缘 于 2006/11/19 19:10 发表
<one-to-one name="b" property-ref="a1"/>
<one-to-one name="b" property-ref="a2"/>

A.java 中只有一个属性b ,如果出现两个one-to-one , name都是b ...




你这么谢肯定有问题.1对1PK关联只能是B和A的唯一对象关联.相当于a1和a2都指定同一对象(或这么表述:对应A表同一条记录).

其实我比较不明白的是lz为什么要设置a1和a2,是不是把需求贴贴,大家讨论下是否还有更好的设计.
回复

使用道具 举报

 楼主| 发表于 2006-11-21 21:49 | 显示全部楼层

问题算是解决了,其实是数据库模型设计的不好,不知道现在修改后这样设计好不好?

其实是数据库模型设计的不好,现在改了模型就搞定了。

在员工考核成绩公布后,该员工如果不满意自己的成绩,可以提起复核申请,申请成功后可以对他重新进行评分,然后公布成绩,
如果还不满意成绩,可以再次提起申诉申请,申请通过后,由专门的仲裁小组等对其再一次的评分;
(只有先复核,复核不满意后才能提起申诉)

这里的A1,A2就是这两张申请表,表的字段相同,但有些字段的具体含义却不完全相同。

原来是想搞张总表B,作为连接表,关联:复核表ID,申诉表ID,考核表ID(考核表存放考核的成绩等内容);

现在删掉总表,表A作为复核表(关联考核表ID),表B作为申诉表(关联复核表ID);
回复

使用道具 举报

发表于 2006-11-22 11:34 | 显示全部楼层
明白.

考核表 - 复核表关系是 1 对 0,1
复核表 - 申诉表关系是 1 对 0,1

lz是这个意思没错吧?
回复

使用道具 举报

发表于 2006-11-22 11:36 | 显示全部楼层
唉,,,惭愧啊...现在我用hibernate都完全没用它的对象关联功能...全部都是最普通的那么用...

现在才知道什么叫性能的重要性...分页连select count(*)都不能用...汗啊.
回复

使用道具 举报

 楼主| 发表于 2006-11-22 13:13 | 显示全部楼层

恩 是这意思

原帖由 wool王 于 2006-11-22 11:34 发表
明白.

考核表 - 复核表关系是 1 对 0,1
复核表 - 申诉表关系是 1 对 0,1

lz是这个意思没错吧?
......现在我用hibernate都完全没用它的对象关联功能...全部都是最普通的那么用...




没用关联?那不是没的级联操作了?

我们分页和排序都是用别人写好的标签
回复

使用道具 举报

发表于 2006-11-22 14:26 | 显示全部楼层
原帖由 深圳情缘 于 2006/11/22 13:13 发表



没用关联?那不是没的级联操作了?

我们分页和排序都是用别人写好的标签




嗯.禁止用.对于关联关系数据库不准建外键.写sql必须加where条件.

那些数据一select动不动就几百上千万条的,如果不加这些限制,性能会有很大影响.

我记得以前有次select花了5个多小时时间.这些做成同步请求基本上是不可能的.
回复

使用道具 举报

发表于 2006-11-22 17:13 | 显示全部楼层
原帖由 wool王 于 2006-11-22 14:26 发表




嗯.禁止用.对于关联关系数据库不准建外键.写sql必须加where条件.

那些数据一select动不动就几百上千万条的,如果不加这些限制,性能会有很大影响.

我记得以前有次select花了5个多小时时间.这些做成同 ...


既然对性能要求如此严格,应该充分利用了缓存吧?
Wool有空的时候,给我们讲讲海量数据的处理啦!
回复

使用道具 举报

 楼主| 发表于 2006-11-22 18:52 | 显示全部楼层

不是很明白

原帖由 wool王 于 2006-11-22 14:26 发表

对于关联关系数据库不准建外键.写sql必须加where条件.



不是很明白哦 :L



性能与易用,经常是要做出取舍的

[ 本帖最后由 深圳情缘 于 2006-11-22 19:54 编辑 ]
回复

使用道具 举报

发表于 2006-11-24 01:41 | 显示全部楼层
原帖由 深圳情缘 于 2006/11/22 18:52 发表



不是很明白哦 :L



性能与易用,经常是要做出取舍的




不准用外键,是为了可以割接。想象下上千张表,如果关联全用外键,在割接的时候那些关系不救“剪不断,理还乱”吗???况且,按功能分模块,也不允许有过多的外键关联。

每个select都必须加where语句,是因为如果没有加条件定位,而直接用“select * from table”的话,会严重影响性能,我上面的帖子提到我试过在sqlplus里写个select语句它跑了6个小时才出了结果,试想如果一个网页list一个表的数据需要N个小时,谁还受得了?

不能用select count(*)是因为这也是会比较影响性能的,而且统计总记录数(和总页数)有时是没有意义的。想象一下如果有上百万数据,每页20条数据做分页,那统计页数其实已经没什么意义了,没什么人会一页一页去翻查吧?
回复

使用道具 举报

发表于 2006-11-24 01:42 | 显示全部楼层
原帖由 powerwind 于 2006/11/22 17:13 发表


既然对性能要求如此严格,应该充分利用了缓存吧?
Wool有空的时候,给我们讲讲海量数据的处理啦!



关于海量数据处理,我刚有了点皮毛的认识,许多东西还没真正理解透彻,现在还不敢出来献丑。如果我有什么心得体会我会过来和大家share的。
回复

使用道具 举报

 楼主| 发表于 2006-11-24 19:48 | 显示全部楼层

受益了,我们系统都比较小,数据不是特别庞大,所以就没考虑那么多

受益了,我们系统都比较小,数据不是特别庞大,所以就没考虑那么多

有空多回来发发贴哇  ^_^
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 18:51

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表