浏览 2535 次
锁定老帖子 主题:hibernate 使用复合主键的问题
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-18
最近在学校工作室做项目时碰到一个Hibernate复合主键的问题,也就是多对多映射的时候中间表不使用代理主键的话会用到复合主键,如果使用代理主键的话,那么中间表的外键肯定是many-to-one的,这样的话跟业务要求不合(即两端的主键合成的中间表外键必须是唯一的,而这样能做到不唯一)。物理模型见附件。 大概描述:
收邮件 用户表-n----m-用户_邮件表-p----n-邮件表
发邮件 用户表-n-----1-邮件表
中间表的映射:
<composite-id name="id" class="cn.magicoa.skstudio.domain.UserMailId" > <key-many-to-one name="mailChit" class="cn.magicoa.skstudio.domain.MailChit"> <column name="MailId" /> </key-many-to-one> <key-many-to-one name="oaUser" class="cn.magicoa.skstudio.domain.OaUser" lazy="false"> <column name="Uid" /> </key-many-to-one> </composite-id> private MailChit mailChit; private OaUser oaUser;
这样的话发邮件的用户获取该邮件的接收者列表将非常吃力,默认的这个复合主键的lazy=true,而如果改为false的话效率会非常底,因为如果用户要获取发邮件列表的话不需要收邮件人列表,所以只能在hql查询中使用fetch抓取的方式。请问大家有没有其他的解决方案。
中间表POJO类UserMail:
private UserMailId id; private Short type; private Short isNew;
这样的话需要生成一个UserMailId复合主键POJO类:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-19
不知道楼主要问的问题是什么,没有搞清楚楼主的意思
|
|
返回顶楼 | |
发表时间:2008-06-19
tangdaibing 写道 不知道楼主要问的问题是什么,没有搞清楚楼主的意思
同上 |
|
返回顶楼 | |
发表时间:2008-06-21
我的意思是大家怎么处理复合主键,因为对Hibernate在企业中的应用不熟悉,大家平时在公司是怎么处理的.这种情况下是使用复合主键呢还是使用代理主键!
|
|
返回顶楼 | |
发表时间:2008-06-24
问题没解决,反倒放进了新手贴,寒心!
|
|
返回顶楼 | |