最近在学校工作室做项目时碰到一个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类:
- 描述: 物理模型
- 大小: 32.1 KB
分享到:
相关推荐
hibernate复合主键设置,里面很全面的配置,可以拿到直接用
复合主键映射 <br>通常将复合主键相关属性,单独抽取出来,建立一个独立的类 * 必须实现序列化接口 * 必须实现equals和hashcode方法 采用标签进行映射,其它属性采用正常映射
NULL 博文链接:https://liuna718-163-com.iteye.com/blog/748089
如果使用Hibernate开发legacy的数据库应用,对于数据库表中有使用字符串作为主键或者使用复合主键情况,那么对于这些情况的影射档是比较麻烦的。该示例应用演示了两张表ITEM和CATEGORY_ITEM表有主外键关系,并且ITEM...
hibernate复合主键的实例,hibernate复合主键的实例。
一个简单的复合主键的做关联类的例子
请更名为 Hibernate复合主键.part2.rar
hibernate 无主键表映射资源说明: 1. 简单Demo 2. Demo对应的sql语句 3. 对应博客文档
更名为 Hibernate复合主键.part3.rar
Hibernate复合主键.
本章讲解Hibernate中对数据库复合主键的支持
hibernate3 注释生成复合主键或者嵌入式主键的方法及实例
复合主键映射用起来比普通的增加主键字段要复杂,这里我们就来共同学习Java的Hibernate框架中复合主键映射的创建和使用教程,需要的朋友可以参考下
J2EE\Hibernate技术\Hibernate中对数据库复合主键的支持.pdf
023 复合主键 关联映射 024 其它 关联映射 025 hibernate 悲观锁、乐观锁 026 hibernate 操作树形结构 027 hibernate 查询语言(HQL) 028 hibernate 缓存(性能优化策略) 029 hibernate 抓取策略
博文链接:https://balaschen.iteye.com/blog/155127