hibernate3 注释生成复合主键或者嵌入式主键的方法及实例

  • Post author:
  • Post category:其他


Hibernate不断发展,几乎成为Java数据库持久性的事实标准,因为它非常强大、灵活,而且具备了优异的性能。

传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载。当然创建这些映射有很多方法,可以从已有数据库模式或Java类模型中自动创建,也可以手工创建。无论如何,您最终将获得大量的 Hibernate 映射文件,而且增加了我们的工作步骤。

而现在我们可以借助新的 Hibernate Annotation 库,即可一次性将注释直接嵌入到您的 Java 类中,不再需要映射配置的xml文件,提供了一种强大及灵活的方法来声明持久性映射。


本文主要讲解一下如果通过注释来创建复合主键以及嵌入式主键:


比如系统有用户表(UserAccount) 角色表(Role) 用户角色关系表(UserRole)三张表,用户角色关系表中 userId、roleId 组成复合主键。

一、先code 一个复合主键的类

UserRolePK

:作为符合主键类,要满足以下几点要求。


1.必须实现Serializable接口。



2.必须有默认的public无参数的构造方法。



3.必须覆盖equals和hashCode方法。

equals方法用于判断两个对象是否相同,EntityManger通过find方法来查找Entity时,是根据equals的返回值来判断的。只有对象的userId和roleId 值完全相同时或同一个对象时则返回true。否则返回false。hashCode方法返回当前对象的哈希码,生成的hashCode相同的概率越小越好,算法可以进行优化。

具体代码如下:

二、通过

@IdClass

注释在实体中标注复合主键,需要注意:


1.@IdClass标注用于标注实体所使用主键规则的类



2.在实体中同时标注主键的属性。

本例中在userId和roleId的getter方法前标注@Id,表示复合主键使用这两个属性

实体代码如下。

ps:

符合主键的值一般要通过程序设置,而不是按照某一个规则自动生成的


复合主键也可以采用嵌入式主键替代,例如上面复合主键修改成嵌入式主键的步骤如下



一、code一个嵌入式主键的类,类似于上面的复合主键的类,需要注意

代码中加 @Column 注释的地方


具体代码如下:

二、嵌入式主键实体类的写法

需要在复合主键类的get方法加注@EmbeddedId


具体代码如下



版权声明:本文为sjsky_007原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。