最近在学校工作室做项目时碰到一个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复合主键配置与使用详解》 在Java开发中,Hibernate作为一款强大的ORM框架,大大简化了数据库操作。然而,当我们面临复杂的数据表结构,尤其是涉及到复合主键时,如何在Hibernate中进行配置和使用就显得...
Hibernate复合主键是指在 Hibernate 框架中使用复合主键来唯一标识一个实体。复合主键是指由多个字段组成的主键,用于唯一标识一个实体。在本例中,我们将通过一个简单的复合主键的做关联类的例子来说明 Hibernate ...
本教程将深入探讨如何在Hibernate中设置复合主键,并提供一个可直接使用的配置示例。 一、理解复合主键 在数据库设计中,复合主键是指由两个或更多列组成的键,这些列共同构成表的唯一标识。当单一的字段无法唯一...
在Hibernate中,我们可以通过实现`Serializable`接口并使用`@Embeddable`和`@EmbeddedId`注解来定义和管理复合主键。 首先,我们需要创建一个代表复合主键的类。例如,对于订单明细表,我们可以创建一个名为`...
通过以上的解释,我们可以看到,虽然无主键表在数据库中并不常见,但在某些特定场景下,如复合主键,Hibernate提供了一套完整的解决方案。所提供的资源包括一个简单的Demo,可以实际运行并理解无主键表映射的实现...
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本实例将深入探讨如何在...希望这个实例能帮助你理解和掌握Hibernate中复合主键的使用。
如果使用Hibernate开发legacy的数据库应用,对于数据库表中有使用字符串作为主键或者使用复合主键情况,那么对于这些情况的影射档是比较麻烦的。该示例应用演示了两张表ITEM和CATEGORY_ITEM表有主外键关系,并且ITEM...
在Hibernate中,我们可以使用`@IdClass`或`@EmbeddedId`注解来处理复合主键。 1. 使用@IdClass `@IdClass`注解用于指定一个单独的类作为复合主键的载体。这个类通常包含与复合主键相关的属性,并且需要实现`java....
请更名为 Hibernate复合主键.part2.rar
更名为 Hibernate复合主键.part3.rar
本章讲解Hibernate中对数据库复合主键的支持
### Hibernate中对数据库复合主键的支持 #### 一、引言 在软件开发过程中,特别是在J2EE领域中,Hibernate作为一种流行的ORM(Object-Relational Mapping)框架被广泛使用。ORM框架的主要作用是将关系型数据库中的...
在Hibernate的映射配置文件(通常是`.hbm.xml`文件)中,我们需要使用`<composite-id>`标签来声明复合主键。`<composite-id>`标签的`name`属性应设置为实体类中复合主键属性的名称,即`FiscalYearPeriod`中的`...
这篇文档将介绍如何使用Hibernate注解来生成复合主键或嵌入式主键。 复合主键(Composite Key)是指由两个或更多个列共同构成的唯一标识,而嵌入式主键(Embedded Key)则是将主键字段嵌入到实体类内部。在不使用...
本文将详细探讨如何在SSH框架(Spring、Struts、Hibernate)中的实体类使用`@IdClass`注解来定义复合主键,并阐述其使用方法及注意事项。 #### 二、复合主键的定义与应用场景 复合主键是指由两个或两个以上的字段...
博文链接:https://balaschen.iteye.com/blog/155127