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