`

嵌入式主键@EmbeddedId

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

(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();

}
分享到:
评论

相关推荐

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

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

    JPA_5_联合主键

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

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

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

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

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

    Hibernate入门(代码+笔记)

    @EmbeddedId将一个包含所有主键字段的类作为嵌入式对象,而@IdClass则是在实体类中声明一个包含所有主键属性的类。 **第五部分:Hibernate实体层设计** 这部分将探讨如何优化实体层的设计,以提高应用的性能和可...

    Toplink_JPA注解参考

    对于复合主键,可以使用@EmbeddedId注解配合一个嵌入式类来表示。例如: ```java @Embeddable public class OrderId { private String orderId; private int customerId; } @Entity public class Order { @...

    Hiberate Annotation学习笔记

    - 当实体类的主键由多个属性组成时,可以使用 `@EmbeddedId` 注解配合一个嵌入式 ID 类来定义复合主键。 7. **关系映射** - Hibernate 注解还支持各种关系映射,如 `@OneToOne`, `@ManyToOne`, `@OneToMany`, `@...

    JPA 批注参考(全部).pdf

    - **嵌入式主键批注 (@EmbeddedId)**:用于将一个包含主键属性的类嵌入实体中。 ```java @Entity public class Employee { @EmbeddedId private EmployeePK id; // 主键类 public static class EmployeePK ...

    hibernate属性级别注解实例代码

    嵌入式主键类需要实现`Serializable`接口,并拥有默认的public无参数构造函数以及覆盖`equals()`和`hashCode()`方法。 6. `@Lob` - 用于标记属性为大型对象(如BLOB或CLOB)。它可以用于存储大块的二进制数据或文本...

    JPA标签(注解)详细说明

    - `@EmbeddedId`:将一个嵌入式类作为主键。 - `@GeneratedValue`:控制主键生成策略,如自增、序列等。 - `@SequenceGenerator` 和 `@TableGenerator`:定义生成主键的序列或表。 4. **直接映射**: - `@Basic...

    JPA全面讲解

    如果实体使用复合主键,可以使用`@EmbeddedId`或`@IdClass`。 3. 直接映射:`@Basic`批注用于基本类型的映射,`@Temporal`用于日期时间类型,`@Lob`用于大对象(BLOB/CLOB),`@Transient`则标记不需持久化的字段。...

    JPA 批注总结参考

    - `@EmbeddedId`:将一个嵌入式ID类作为主键。 - `@GeneratedValue`:控制主键的生成策略,如自动增量或序列。 - `@SequenceGenerator` 和 `@TableGenerator`:定义主键生成器的配置。 4. **直接映射批注**: -...

    java jap API

    - `@EmbeddedId`:用于嵌入式主键,即主键作为一个独立的类。 - `@GeneratedValue`:用于指定主键的生成策略,如自增、序列等。 - `@SequenceGenerator`:用于配置序列生成器。 - `@TableGenerator`:用于配置表生成...

    JAP注解参考

    - `@EmbeddedId`:使用嵌入式ID类作为主键。 - `@GeneratedValue`:自动生成主键值,如序列或自增。 - `@SequenceGenerator`和`@TableGenerator`:定义主键生成策略。 4. **直接映射(Basic Mapping)**: - `@...

    JPA-全面讲解.docx

    2. **身份管理**:JPA要求每个实体有一个主键,可以使用`@Id`批注指定主键字段,或者使用`@EmbeddedId`或`@IdClass`来定义复合主键。`@GeneratedValue`批注用于控制主键的生成策略,比如自动增长。 3. **直接映射**...

    JPA 批注参考Java JPA

    - `@EmbeddedId`:将一个嵌入式类作为主键。 - `@GeneratedValue`:定义主键生成策略,如自动递增、序列等。 - `@SequenceGenerator` 和 `@TableGenerator`:配置自动生成主键的策略。 4. **直接映射(Direct ...

    JPA 批注参考

    - **@EmbeddedId**: 用于标记嵌入式复合主键。 - **@GeneratedValue**: 用于指定主键生成策略。 - **@SequenceGenerator**: 用于定义序列生成器。 - **@TableGenerator**: 用于定义基于表的主键生成器。 **4. 直接...

    jpa批注参考

    #### 身份批注:`@Id`, `@IdClass`, `@EmbeddedId`, `@GeneratedValue`, `@SequenceGenerator`, `@TableGenerator` `@Id`批注用于标记实体中的某个字段或属性作为主键。`@GeneratedValue`批注则进一步指定了主键的...

    JPA注解参考文档.txt

    - **@EmbeddedId**:用于嵌入式主键的情况。 - **@GeneratedValue**:用于指定主键的生成策略。 - **@SequenceGenerator**:用于指定序列生成器。 - **@TableGenerator**:用于指定表生成器。 ##### 5. **属性映射...

Global site tag (gtag.js) - Google Analytics