复合主键也可以采用嵌入式主键替代,例如将上一小节中复合主键修改成嵌入式主键的步骤如下:
(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注解来生成复合主键或嵌入式主键。 复合主键(Composite Key)是指由两个或更多个列共同构成的唯一标识,而嵌入式主键(Embedded Key)则是将主键字段嵌入到实体类内部。在不使用...
首先,创建一个嵌入式主键类,标记为`@Embeddable`: ```java @Embeddable public class CompositeKey { @Id private String field1; @Id private int field2; } ``` 接着,在实体类中使用`@EmbeddedId`: ```...
在这个例子中,`StudentCourseKey`是一个嵌入式类,它的实例作为`Enrollment`实体的主键。 在JPA中,处理联合主键需要注意以下几点: - 联合主键的类必须实现Serializable接口,因为所有主键都必须是可序列化的。 ...
2. **@EmbeddedId**:这种方式将联合主键作为一个嵌入式对象(Embedded Object)处理,直接在实体类内部定义主键类,每个字段同样使用@Id注解。 ### 二、使用@EmbeddedId 实现联合主键 假设我们有一个`Order`实体...
@EmbeddedId将一个包含所有主键字段的类作为嵌入式对象,而@IdClass则是在实体类中声明一个包含所有主键属性的类。 **第五部分:Hibernate实体层设计** 这部分将探讨如何优化实体层的设计,以提高应用的性能和可...
对于复合主键,可以使用@EmbeddedId注解配合一个嵌入式类来表示。例如: ```java @Embeddable public class OrderId { private String orderId; private int customerId; } @Entity public class Order { @...
- 当实体类的主键由多个属性组成时,可以使用 `@EmbeddedId` 注解配合一个嵌入式 ID 类来定义复合主键。 7. **关系映射** - Hibernate 注解还支持各种关系映射,如 `@OneToOne`, `@ManyToOne`, `@OneToMany`, `@...
- **嵌入式主键批注 (@EmbeddedId)**:用于将一个包含主键属性的类嵌入实体中。 ```java @Entity public class Employee { @EmbeddedId private EmployeePK id; // 主键类 public static class EmployeePK ...
嵌入式主键类需要实现`Serializable`接口,并拥有默认的public无参数构造函数以及覆盖`equals()`和`hashCode()`方法。 6. `@Lob` - 用于标记属性为大型对象(如BLOB或CLOB)。它可以用于存储大块的二进制数据或文本...
- `@EmbeddedId`:将一个嵌入式类作为主键。 - `@GeneratedValue`:控制主键生成策略,如自增、序列等。 - `@SequenceGenerator` 和 `@TableGenerator`:定义生成主键的序列或表。 4. **直接映射**: - `@Basic...
如果实体使用复合主键,可以使用`@EmbeddedId`或`@IdClass`。 3. 直接映射:`@Basic`批注用于基本类型的映射,`@Temporal`用于日期时间类型,`@Lob`用于大对象(BLOB/CLOB),`@Transient`则标记不需持久化的字段。...
- `@EmbeddedId`:将一个嵌入式ID类作为主键。 - `@GeneratedValue`:控制主键的生成策略,如自动增量或序列。 - `@SequenceGenerator` 和 `@TableGenerator`:定义主键生成器的配置。 4. **直接映射批注**: -...
- `@EmbeddedId`:用于嵌入式主键,即主键作为一个独立的类。 - `@GeneratedValue`:用于指定主键的生成策略,如自增、序列等。 - `@SequenceGenerator`:用于配置序列生成器。 - `@TableGenerator`:用于配置表生成...
- `@EmbeddedId`:使用嵌入式ID类作为主键。 - `@GeneratedValue`:自动生成主键值,如序列或自增。 - `@SequenceGenerator`和`@TableGenerator`:定义主键生成策略。 4. **直接映射(Basic Mapping)**: - `@...
2. **身份管理**:JPA要求每个实体有一个主键,可以使用`@Id`批注指定主键字段,或者使用`@EmbeddedId`或`@IdClass`来定义复合主键。`@GeneratedValue`批注用于控制主键的生成策略,比如自动增长。 3. **直接映射**...
- `@EmbeddedId`:将一个嵌入式类作为主键。 - `@GeneratedValue`:定义主键生成策略,如自动递增、序列等。 - `@SequenceGenerator` 和 `@TableGenerator`:配置自动生成主键的策略。 4. **直接映射(Direct ...
- **@EmbeddedId**: 用于标记嵌入式复合主键。 - **@GeneratedValue**: 用于指定主键生成策略。 - **@SequenceGenerator**: 用于定义序列生成器。 - **@TableGenerator**: 用于定义基于表的主键生成器。 **4. 直接...
#### 身份批注:`@Id`, `@IdClass`, `@EmbeddedId`, `@GeneratedValue`, `@SequenceGenerator`, `@TableGenerator` `@Id`批注用于标记实体中的某个字段或属性作为主键。`@GeneratedValue`批注则进一步指定了主键的...
- **@EmbeddedId**:用于嵌入式主键的情况。 - **@GeneratedValue**:用于指定主键的生成策略。 - **@SequenceGenerator**:用于指定序列生成器。 - **@TableGenerator**:用于指定表生成器。 ##### 5. **属性映射...