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

【转】hibernate的@EmbeddedId嵌入式主键类详解

    博客分类:
  • SSH
 
阅读更多

复合主键也可以采用嵌入式主键替代,例如将上一小节中复合主键修改成嵌入式主键的步骤如下:

1 )编写一个嵌入式主键的类 CustomerPK ,代码如下。

import java.io.Serializable;

 

@Embeddable

public class CustomerPK implements Serializable {

 

         public CustomerPK() {}

 

         public CustomerPK(String name, String email) {

                   this.name = name;

                   this.email = email;

         }

/** 其他代码与上一小节中相同 */

}

作为嵌入式主键类,要满足以下几点要求。

l          必须实现 Serializable 接口、必须有默认的 public 无参数的构造方法、必须覆盖 equals hashCode 方法,这些要求与使用复合主键的要求相同。

l          将嵌入式主键类使用 @Embeddable 标注,表示这个是一个嵌入式类。

2 )通过 @EmbeddedId 注释标注实体中的嵌入式主键,实体代码如下。

@Entity

@Table(name = "customer")

public class CustomerEO implements java.io.Serializable {

 

         public CustomerEO() {

         }

 

         public CustomerEO( String name, String email) {

                   this.id = new CustomerPK(name,email);

         }

 

         /** 嵌入式主键 */

@EmbeddedId

         private CustomerPK id ;

 

         private String name;

 

         /** 客户名称 */

         @Column(name = "name")

         public String getName() {

                   return this.id.getName();

         }

 

         public void setName(String name) {

                   this.id.setName(name) ;

         }

        

         private String email;

        

         @Column(name = "email")

         public String getEmail() {

                   return this.id.getEmail();

         }

 

         public void setEmail(String email) {

                   this.id.setEmail(email);

         }

 

}

3 )这样定义实体的嵌入式主键后,通过以下代码便可以获得指定的实体对象。

public CustomerEO findCustomer( String name ,String email){

         return (CustomerEO)

         entityManager.createQuery("SELECT c FROM CustomerEO c WHERE c.id.name = ?1 AND e.id.email = ?2")

         .setParameter(1, name)

         .setParameter(2, email)

         .getSingleResult();

}

分享到:
评论

相关推荐

    hibernate 无主键表映射

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

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

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

    hibernate复合主键设置

    `@Embeddable`用于定义一个复合主键类,而`@EmbeddedId`则是在实体类中声明这个复合主键。 1. 定义复合主键类 首先,创建一个表示复合主键的类,通常会包含所有主键字段,并使用`@Embeddable`注解: ```java ...

    hibernate复合主键映射

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

    hibernate复合主键配置和使用

    《Hibernate复合主键配置与使用详解》 在Java开发中,Hibernate作为一款强大的ORM框架,大大简化了数据库操作。然而,当我们面临复杂的数据表结构,尤其是涉及到复合主键时,如何在Hibernate中进行配置和使用就显得...

    Hibernate注解映射联合主键

    但是,此时在主类中,我们将这个联合主键类的引用注解为`@EmbeddedId`,而不是`@Id`。这表示联合主键类作为一个整体被嵌入到主类中,而不是作为独立的字段。 3. **使用`@IdClass`** 这种方式下,联合主键的每个...

    Hibernate复合主键.

    总结来说,Hibernate通过`@IdClass`和`@EmbeddedId`两种方式提供了对复合主键的支持。理解和熟练掌握这些概念,可以帮助开发者更好地处理复杂的数据模型,提高代码的可维护性和灵活性。在实际项目中,选择合适的复合...

    Hibernate联合主键的例子

    在Hibernate中,我们可以使用`@Embeddable`和`@EmbeddedId`注解来定义和使用联合主键。 1. **创建联合主键类:** 在MyEclipse中,我们首先创建一个Java类来表示联合主键。这个类需要被标记为`@Embeddable`,并包含...

    JPA_5_联合主键

    首先,创建一个嵌入式主键类,标记为`@Embeddable`: ```java @Embeddable public class CompositeKey { @Id private String field1; @Id private int field2; } ``` 接着,在实体类中使用`@EmbeddedId`: ```...

    15_传智播客JPA详解_JPA中的联合主键

    在这个例子中,`StudentCourseKey`是一个嵌入式类,它的实例作为`Enrollment`实体的主键。 在JPA中,处理联合主键需要注意以下几点: - 联合主键的类必须实现Serializable接口,因为所有主键都必须是可序列化的。 ...

    hibernate复合主键的实例

    在Hibernate中,通过定义`@Embeddable`的复合主键类和`@EmbeddedId`的实体类,我们可以方便地管理和操作这些复合主键的实体。在保存和查询时,需注意正确设置复合主键的值,以确保数据的正确性。希望这个实例能帮助...

    Hibernate复合主键

    在本例中,我们将通过一个简单的复合主键的做关联类的例子来说明 Hibernate 复合主键的使用。 复合主键的定义 在 Java 中,复合主键类需要实现 equals 方法和 Serializable 接口。例如,RecordId 类就是一个复合...

    JPA中的联合主键

    `@IdClass`是将主键类作为单独的实体,而`@EmbeddedId`则是将主键字段嵌入到实体类中。 1. **使用@IdClass** 使用`@IdClass`时,你需要创建一个独立的类来表示联合主键,这个类需要包含所有主键字段,并且每个字段...

    JPA联合主键

    **JPA联合主键详解** 在Java Persistence API (JPA) 中,主键是用于唯一标识实体的关键字段。在很多情况下,一个实体的主键可能不是由单一字段组成,而是由两个或更多个字段共同构成,这样的主键就被称为联合主键...

    JPA学习总结(五)--JPACompositePK联合主键

    2. **@EmbeddedId**:这种方式将联合主键作为一个嵌入式对象(Embedded Object)处理,直接在实体类内部定义主键类,每个字段同样使用@Id注解。 ### 二、使用@EmbeddedId 实现联合主键 假设我们有一个`Order`实体...

    hibernate注解详解

    在Hibernate中,注解是用于替代传统的XML配置文件,以元数据的形式标注在类、属性或者方法上,实现对象与数据库表之间的映射。本文将深入探讨Hibernate中的注解,帮助你更好地理解和应用它们。 1. **实体注解(@...

    JPA 联合主键

    **JPA 联合主键详解** 在Java Persistence API(JPA)中,主键是用于唯一标识实体的关键字段。通常,一个实体可能只有一个主键字段,但有些情况下,为了实现唯一标识,可能需要使用两个或多个字段的组合,这就是...

    Hibernate教程08_关系映射之联合主键

    在Hibernate中,实现联合主键可以通过使用`@Embeddable`和`@EmbeddedId`注解。首先,我们需要创建一个包含所有主键字段的类,并使用`@Embeddable`标记。这个类通常会作为其他实体类的属性,用`@EmbeddedId`注解。...

    Hibernate一对一单向外键关联 (联合主键annotation)

    `@EmbeddedId`注解用于声明一个类作为主键,而`@Embeddable`注解用于定义主键类。联合主键意味着多个字段共同构成主键,这样可以提供更为复杂和灵活的主键策略。 以下是一个示例,假设我们有两个实体,一个是`...

Global site tag (gtag.js) - Google Analytics