`
hudixin1987
  • 浏览: 16111 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

hibernate注解方式实现复合主键

 
阅读更多

有时一个实体的主键可能同时为多个,例如同样是之前使用的“CustomerEO”实体,需要通过name和email来查找指定实体,当且仅当name和email的值完全相同时,才认为是相同的实体对象。要配置这样的复合主键,步骤如以下所示。

(1)编写一个复合主键的类CustomerPK,代码如下。

CustomerPK.java

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

l 必须实现Serializable接口。

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

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

(2)通过@IdClass注释在实体中标注复合主键,实体代码如下。

标注复合主键时需要注意以下几个问题。

l @IdClass标注用于标注实体所使用主键规则的类。它的定义如下所示。

@Target({TYPE}) @Retention(RUNTIME)

public @interface IdClass {

Class value();

}

属性Class表示符合主键所使用的类,本例中使用CustomerPK这个复合主键类。

l 在实体中同时标注主键的属性。本例中在email和name的getter方法前标注@Id,表示符合主键使用这两个属性。

(3)这样定义实体的复合主键后,通过以下代码便可以获得指定的实体对象:

CustomerPK cpk = new CustomerPK("Janet","janetvsfei@yahoo.com.cn");

CustomerEO instance = entityManager.find(CustomerEO.class, cpk);

分享到:
评论

相关推荐

    hibernate复合主键配置和使用

    在Hibernate中,我们可以通过`@Embeddable`和`@EmbeddedId`注解来实现复合主键的配置。 1. 创建复合主键类 首先,我们需要创建一个表示复合主键的类,该类需要被`@Embeddable`注解标记。例如,假设我们有用户地址...

    hibernate复合主键设置

    在Hibernate的映射文件(XML方式)或者使用JPA注解(Java方式)中,需要为复合主键提供相应的配置。对于XML配置,你可能会看到类似以下的设置: ```xml <hibernate-mapping> <!-- 其他属性的映射 --> ...

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

    这篇文档将介绍如何使用Hibernate注解来生成复合主键或嵌入式主键。 复合主键(Composite Key)是指由两个或更多个列共同构成的唯一标识,而嵌入式主键(Embedded Key)则是将主键字段嵌入到实体类内部。在不使用...

    hibernate 无主键表映射

    `@Embeddable`注解用于定义一个包含复合主键字段的类,而`@EmbeddedId`注解则用在实体类上,指定这个复合主键类。 以下是一个简单的示例: 1. **复合主键类(Composite Key Class)** ```java import javax....

    hibernate复合主键映射

    在Hibernate中,我们可以通过实现`Serializable`接口并使用`@Embeddable`和`@EmbeddedId`注解来定义和管理复合主键。 首先,我们需要创建一个代表复合主键的类。例如,对于订单明细表,我们可以创建一个名为`...

    Hibernate中对数据库复合主键的支持.pdf

    ### Hibernate中对数据库复合主键的支持 #### 一、引言 在软件开发过程中,特别是在J2EE领域中,Hibernate作为一种流行的ORM(Object-Relational Mapping)框架被广泛使用。ORM框架的主要作用是将关系型数据库中的...

    JPA注解实现联合主键

    接下来,需要定义一个实体类,并使用`@IdClass`注解指定之前创建的复合主键类。此外,还需要在每个参与联合主键的属性上使用`@Id`注解。 ```java package com.ericsson.adp.entity.cons; import javax.persistence...

    Hibernate 注解说明文档

    本文档将深入探讨Hibernate注解的使用,帮助开发者更好地理解和利用这些注解来实现对象关系映射(ORM)。 一、Hibernate注解基础 Hibernate注解是一种元数据方式,用于在Java类和属性上声明数据库映射信息,从而...

    Hibernate复合主键.

    **正文** Hibernate是一款广泛应用于Java开发中的对象关系映射(ORM)框架,它极大地简化了数据库操作。...在实际项目中,选择合适的复合主键实现方式以及正确地进行持久化操作,是确保数据一致性与完整性的关键。

    hibernate复合主键的实例

    本实例将深入探讨如何在Hibernate中实现复合主键,并提供一个具体的示例来帮助理解。 一、什么是复合主键? 在数据库设计中,主键是用于唯一标识表中每一行的字段或字段组合。当一个表的主键由两个或更多个字段...

    hibernate注解详解

    当主键由多个字段组成时,可以使用`@EmbeddedId`和`@Embeddable`注解来定义复合主键。 10. **索引注解(@Index)** `@Index`注解用于在数据库表的列上创建索引,提高查询效率。 11. **缓存注解(@Cacheable, @Cache...

    hibernate注解详解说明

    - `@EmbeddedId` 和 `@Embeddable`:用于创建复合主键,将多个字段组合成一个主键。 - `@ManyToOne` 和 `@OneToOne` 可以配合 `@MapsId` 将外键作为实体的一部分。 #### 映射二级表(secondary tables) 通过 `@...

    hibernate注解.rar

    @JoinColumn用于指定实体间的关联字段,特别是在处理复合主键和外键时非常有用。 四、注解配置的优缺点 4.1 优点 (1)简化配置:注解使得ORM配置更直观,减少了XML配置的工作量。 (2)可读性强:注解直接嵌入...

    Hibernate注解和xml配置介绍

    Hibernate的映射配置对于实现复杂的数据库操作非常重要,了解和掌握Hibernate注解和XML配置的知识是每个Java数据库开发人员的基本功。通过上述介绍的内容,可以看到无论是简单还是复杂的数据库映射需求,Hibernate都...

    hibernate注解学习笔记

    `@EmbeddedId` 注解用于标识复合主键。 示例代码: ```java @Embeddable public class EmployeeId { private Long empId; private Long deptId; //... } @Entity @Table(name = "employees") public class ...

    复合主键@IdClass

    本文将详细探讨如何在SSH框架(Spring、Struts、Hibernate)中的实体类使用`@IdClass`注解来定义复合主键,并阐述其使用方法及注意事项。 #### 二、复合主键的定义与应用场景 复合主键是指由两个或两个以上的字段...

    hibernate 注解 英文版的

    在 Hibernate 中,可以使用 XML 文件或注解来定义元数据,而随着 JPA(Java Persistence API)的引入,注解成为一种更加简洁高效的方式。 #### 二、设置注解项目 **2.1 要求** - Java SE 5 或更高版本。 - 支持 ...

    hibernate注解处理映射关系共14页.pdf.zip

    本资料“hibernate注解处理映射关系共14页.pdf.zip”显然是一个关于Hibernate注解使用的详细教程,涵盖了14页的内容。以下是基于该主题的详尽知识点解析: 1. **Hibernate概述**:Hibernate是Java平台上的一个开源...

    hibernate 中文注解

    - **映射复合主键与外键:** 复合主键通过`@IdClass`或`@EmbeddedId`注解实现。 - **映射二级表(secondary tables):** 使用`@SecondaryTables`注解来映射多个表。 #### 四、映射查询 - **映射EJBQL/HQL查询:** ...

Global site tag (gtag.js) - Google Analytics