`
beyondqinghua
  • 浏览: 41588 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

hibernate 使用复合主键的问题

    博客分类:
  • JEE
阅读更多

最近在学校工作室做项目时碰到一个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抓取的方式。请问大家有没有其他的解决方案。

 

中间表POJOUserMail

	private UserMailId id;
	private Short type;
	private Short isNew;

 

这样的话需要生成一个UserMailId复合主键POJO类:

 

  • 描述: 物理模型
  • 大小: 32.1 KB
分享到:
评论
4 楼 beyondqinghua 2008-06-24  
问题没解决,反倒放进了新手贴,寒心!
3 楼 beyondqinghua 2008-06-21  
我的意思是大家怎么处理复合主键,因为对Hibernate在企业中的应用不熟悉,大家平时在公司是怎么处理的.这种情况下是使用复合主键呢还是使用代理主键!
2 楼 wxb_love 2008-06-19  
tangdaibing 写道
不知道楼主要问的问题是什么,没有搞清楚楼主的意思


同上
1 楼 tangdaibing 2008-06-19  
不知道楼主要问的问题是什么,没有搞清楚楼主的意思

相关推荐

Global site tag (gtag.js) - Google Analytics