实体 Bean 与关系数据库中的表类似,它可以与其他实体 Bean 关联。使用 bean 管理持久性,您编写的代码可以实现这些关系。但是使用容器管理持久性,EJB 容器将为您实现此关系。
例如,请考虑随 J2EE JDK 提供的 cmpcustomer 示例。该示例定义了客户、地址和订阅之间的关系。每个客户可能具有一个或多个地址。每个客户也可能具有零或多个订阅。同样地,单个订阅可能与多个客户关联。
为了确保上面的示例能够正常使用,必须正确配置表示这些数据库表的实体 Bean 之间的关系。通过现有数据库生成 CMP 实体 Bean 时,IDE 将自动配置模块的 CMP 关系和 CMP 字段,并创建 Sun Java System Application Server 使用的缺省映射。
数据库之间可以是单向或多向的关系。例如,在上面的 cmpcustomer 示例中,客户和地址之间是单向关系,因为客户表引用地址表,但是地址表不引用客户表。另一方面,订阅和客户之间是多向关系。
多重性(也称为基数性)描述了关系的每一方可以有多少个实例。实体 Bean 可以具有以下多重性:
一个表的存在通常取决于引用它的表是否存在。例如,在上面的 cmpcustomer 示例中,您可能为客户添加和删除了单个地址。因为地址实例必须与客户相关联,因此在删除客户时,还会自动删除与该客户关联的所有地址。
应用服务器可通过层叠删除设置来自动完成此操作。如果在关系中启用层叠删除,在删除 Bean 时,将删除它所引用的所有相关 Bean 实例。
通过数据库生成 CMP 实体 Bean 时,IDE 将基于数据库中的关系自动注册所有容器管理关系。可以在 EJB 模块的 ejb-jar.xml 部署描述符中管理 CMP 关系。