"EJB3持久化规范(简体中文版)是关于Java企业级应用程序(EJB)3.0版本中的持久化机制的官方规范,适用于SSH框架相关的开发。该文档由卫建军翻译,旨在帮助中文读者更好地理解和应用J2EE架构中的持久化规则。规范涵盖了实体类的要求、实体操作、实体实例的生命周期、持久化上下文的生命周期、乐观锁和并发控制以及实体监听器和回调方法等核心概念。"
在EJB3规范中,持久化是处理对象与数据库之间映射的关键部分,它简化了数据存储和检索的过程。以下是EJB3持久化规范的一些核心知识点:
1. **实体类的要求**:实体类必须包含特定的注解,如`@Entity`,用于标记一个类为可持久化的。持久化字段和属性通常使用`@Column`注解来指定如何映射到数据库列。
2. **持久化字段和属性**:实体类的字段可以直接映射到数据库表的列,属性可以是关系型数据库中的记录。
3. **主键和实体唯一标识**:每个实体都应有一个或多个主键字段,用`@Id`注解标识,它们确保实体的唯一性。主键可以是自动生成的,也可以由用户指定。
4. **可嵌入类**:`@Embeddable`注解用于标记那些可以嵌入到其他实体中的类,这允许复合键和复杂的对象结构。
5. **对非关系字段或属性的映射缺省值**:EJB3提供了默认的映射策略,例如,如果字段是字符串类型,那么默认长度将是255。
6. **实体关系**:通过`@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany`注解,可以定义不同类型的实体间的关系,如一对一、一对多、多对一和多对多关系。
7. **关系映射缺省值**:对于关联的实体,EJB3提供了默认的外键生成策略和关联管理方式。
8. **继承**:支持单表继承(JOINED, TABLE_PER_CLASS, SINGLE_TABLE)和多表继承策略,使复杂对象模型的映射变得可能。
9. **实体操作**:`EntityManager`是操作实体的主要接口,包括创建、查询、更新和删除实体实例。
10. **实体实例的生命周期**:实体经历持久化、临时、管理状态和游离状态。例如,当实体在事务中被`EntityManager`管理时,它处于管理状态,而一旦事务结束,实体可能变为游离状态。
11. **持久化上下文的生命周期**:持久化上下文与事务紧密关联,事务提交时,持久化上下文中的所有更改会被同步到数据库;事务回滚则会撤销所有更改。
12. **乐观锁和并发**:乐观锁是一种假设并发冲突很少的锁定策略,通常通过版本字段实现。当两个事务试图同时修改同一条记录时,如果版本号不匹配,会抛出`OptimisticLockException`。
13. **实体监听器和回调方法**:通过`@PrePersist`, `@PostPersist`, `@PreUpdate`, `@PostUpdate`, `@PreRemove`, `@PostRemove`等注解,开发者可以定义在特定生命周期事件发生时执行的方法,以实现业务逻辑或数据验证。
EJB3持久化规范不仅提供了详细的API说明,还包含了各种最佳实践和示例,是理解并实施Java企业级应用持久化层设计的重要参考。通过遵循这些规范,开发者可以构建出高效、可靠的J2EE应用程序。