Sun ONE logo上一部分 | 目录 | 索引 | 下一部分
Sun ONE Application Server 7 Enterprise Java Beans 技术开发者指南



使用 Sun ONE Studio 4 接口映射 CMP

本节提供有关使用 Sun ONE Studio 4 接口在一组 Java 编程语言类与关系数据库之间进行映射的信息。

本节介绍以下主题:

使用这些过程之前,您应已经熟悉“将容器管理持久性用于实体 Bean”以及 Enterprise JavaBeans Specification 2.0 第 10 章。

映射 CMP Bean


要映射容器管理持久性 Bean,您必须首先捕获schema,然后将 Bean 映射到schema。

本节包含以下两个部分:

捕获schema

将任何 Enterprise Bean 映射到一个数据库schema之前,需要捕获该schema,才能在文件系统中创建一个工作副本。这样,您就可以在不影响数据库本身的情况下开展工作。.



注意

最好把捕获的schema存储在一个程序包中。如果没有要包含schema的程序包,可通过右键单击文件系统并选择 New Package(新建程序包)来创建一个程序包。



  1. 可以通过三种方法显示 Mapping Tool(映射工具):


    • 右键单击文件系统,并选择 New(新建) > Databases(数据库) > Database Schema(数据库schema)。


    • 从 File(文件)菜单中选择 New(新建),然后在 Template Chooser(模板选择器)中双击 Databases(数据库),并选择 Database Schema(数据库schema)。


    • 从 Tools(工具)菜单中选择 Capture Database Schema(捕获数据库schema)。

  2. 在 Target Location(目标位置)窗格中,为您的schema的工作副本键入一个文件名,然后为捕获的schema选择一个程序包。

  3. 在 Database Connection(数据库连接)窗格中,如果已建立一个连接,您可以从 Existing Connection(现有连接)菜单中选择该连接。否则,在 New Connection(新建连接)下,输入以下信息:


    • 所连接到的数据库的名称(如果下拉菜单中没有列出您的数据库,您可能需要退出 Mapping Tool(映射工具),并在继续之前,在 IDE 中安装驱动程序。)


    • 您的系统的 JDBC 驱动程序。


    • 数据库的 JDBC URL,包括驱动程序标识符、服务器、端口以及数据库名称。例如,jdbc:pointbase://localhost:9092/sample。

      JDBC URL 的格式随所使用的数据库管理系统 (DBMS) 的种类(Oracle、Microsoft SQL Server 或 PointBase)以及该 DBMS 的版本的不同而不同,请向系统管理员询问您的 DBMS 的正确 URL 格式。


    • 您的数据库的用户名。


    • 该用户的密码。

  4. 在 Tables and Views(表和视图)窗格中,选择要捕获的表和视图,然后单击 Finish(完成)。



    注意

    如果您选择了一个表,而没有选择由此表外键所引用的另一个表,则即使您仅指定一个表,也会同时捕获这两个表。



    数据库及其schema如下图所示。


    The screen capture shows a representation of the database and its schema.

将现有 Enterprise Bean 映射到一个schema

本节讨论如何使用容器管理持久性自定义映射或为现有对象模型创建映射。.

把 Eenterprise Bean 映射到一个数据库schema之前,必须确保在您的 Explorer 文件系统中捕获并安装了该数据库schema。有关如何执行此操作的说明,请参阅“捕获schema”

您可以通过在 Properties(属性)窗口中编辑个别属性,设置或编辑一个映射片段。可以通过 Properties 窗口访问所有映射和持久性信息。映射字段属性编辑器提供一种同时查看和编辑类和字段组的方法,从而可以方便地概览您的映射模型。

  1. 在 Filesystem(文件系统)下,打开 EJB Module(EJB 模块)。

    列出该模块中的 Enterprise Bean。

  2. 从其包含的 EJB 模块中选择 Enterprise Bean。

    显示 Enterprise Bean 的属性表。

  3. 如果已完成准备性任务,请单击 Next(下一步),显示 Mapping Tool(映射工具)的 Select Tables(选择表)窗格。

    否则,单击 Cancel(取消),完成任务,并重新启动 Mapping Tool(映射工具)。

  4. 从 Primary Table(主表)组合框中选择一个主表,或者单击 Browse(浏览),打开 Select Primary Table(选择主表)对话框。

  1. 如果您打开 Select Primary Table(选择主表)对话框,请查找到一个schema,并展开该schema来查找其中的表。

  2. 选择一个表,并单击 OK(确定)。

    选择为主表的表应该是最匹配您的类的表。


The screen capture shows an expansion of the tables in the schema.

  1. 一旦设置主表,就可以通过单击 Add(添加)来映射一个或多个从表。

    这会打开 Secondary Table Settings(从表设置)对话框。

    从表使您能够把 Enterprise Bean 中的字段映射到不是主表组成部分的列中。例如,您可能把一个 DEPARTMENT(部门)表作为一个从表进行添加,以便在 Employee(员工)类中包含一个部门名称。 从表不同于关系,因为在一个关系中,一个类通过一个关系字段与另一个类相关。在一个从表映射中,可以把同一类中的字段映射到两个不同的表。一个从表使您能够把字段直接映射到不是主表组成部分的列中。您可以使用此窗格选择从表,并且可以显示如何把这些从表链接到主表。

    一个从表必须通过一个或多个列(其关联行在两个表中具有相同的值)与主表相关。正常情况下,将此定义为表之间的一个外键。当您从下拉菜单中选择一个从表时,Mapping Tool(映射工具)会在两个表之间查找一个外键。如果存在外键,默认情况下,会把该外键显示为参考键。


    1. 从组合框中选择一个从表。

      一旦选择一个从表,容器管理持久性实现功能就会检查主表和从表之间是否有一个外键。如果有,就会把外键显示为默认参考键。如果没有外键,编辑器就会显示 Choose Column(选择列),而且您必须确定一个参考键。


    2. 要确定一个参考键,请单击 Choose Column(选择列),并从下拉菜单中选择一个列。

      一旦选取一个主列,次列中的选择就仅限于具有兼容类型的列。如果没有兼容的列,字段就显示 No Compatible Columns(没有兼容列)。如果您选择一个与您的次列不兼容的主列,次列的值就会还原到 Choose Column(选择列)。



      注意

      如果似乎逻辑上没有列对彼此相关,因而阻止一个逻辑参考键,您可能需要重新考虑选择一个从表。



      您可以使用一个以上的列对来选择 Add Pair(添加对)键,以便安装一个复杂键。

  2. 单击 OK(确定),保存您的选择。

  3. 在 Mapping Tool(映射工具)中单击 Next(下一步),显示 Mapping Tool(映射工具)的 Field Mappings(字段映射)面板。 

    Field Mappings(字段映射)窗格显示 Enterprise Bean 的所有持久字段及其映射状态。您可以通过在该字段的下拉菜单中选择一个列,将一个字段映射到该列,也可以通过选择 Automap(自动映射),映射所有未映射的字段。Automap(自动映射)将进行最具逻辑性的选择,不管任何关系字段以及任何已经映射的字段。它不会更改任何现有映射。

    如果您想要把一个字段从另一个不可用表映射到一个列,请单击 Previous(上一步),返回上一个 Mapping Tool(映射工具)页面,并添加包含所需列的第二个表。

    撤消映射对任何选定字段有效。通过在选择所需字段时按住 Shift 键或 Control 键,您可以撤消映射一组字段。如果您要撤消映射一个项目,请在该字段的下拉菜单中选择 Unmapped(撤消映射)。


    1. 要把一个字段映射到多个列,请在 Field Mappings(字段映射)窗格中单击适当字段的省略号按钮 (...),显示 Map Field to Multiple Columns(把字段映射到多个列)对话框。

      在此对话框中,把列添加到映射列列表。这些列来自已经映射到此类的表。您可以通过 Move Up/Move Down(上移/下移)来更改列顺序。.

      如果看不到索要映射的列,您可能需要把另一个表添加到您的映射中,或者更改所选定的主表。如果没有列出任何列,您就尚未映射主表,或者映射了一个不包含列的表。

      如果将一个字段映射到一个以上列,就利用列出的第一列的值更新所有列。因此,如果在容器管理持久性应用程序之外更改其中一个列的值,而且是对第一列进行了更改,则仅读取该值。把一个值写到数据库会覆盖对任何其他列所作的任何冲突的更改。

      您还必须确保把不只一个字段映射到这些列中的任何一个,映射不能部分重叠。请考虑以下三种情形:


      • 字段 A 映射到列 A 和列 B,字段 B 映射到列 B。由于映射只是部分重叠,编译时,此示例会获得一个有效性验证错误。


      • 字段 A 映射到列 A,而字段 B 映射到列 B。由于不存在重叠,所以允许进行此映射。


      • 字段 A 映射到列 A 和 B,字段 B 映射到列 A 和 B。由于映射完全重叠,所以允许进行此映射。


    2. 单击 OK(确定),保存映射。

映射关系字段

数据库表之间由外键时,通常希望在 Java 类引用中保留这些关系。映射 CMR 字段使您可以指定与类引用字段相对应的关系。

  1. 要映射关系字段,请单击关系字段下拉菜单旁边 Field Mapping(字段映射) 面板中的省略号,显示 Relationship Mapping(关系映射)编辑器。.

要在 Mapping Tool(映射工具)之外使用 Relationship Mapping(关系映射)编辑器 ,请在 Explorer 中单击关系字段,并编辑其 Mapping(映射)属性。


    1. 在此窗格中,验证是否设置了 Related Class(相关类)。如果没有设置相关类,就进行该设置。如果要选择的类不具有持久能力,您可能需要退出编辑器,将类转换为具有持久能力,然后再返回编辑器。


    2. 确保 Related Field(相关字段)(如果有的话)也正确,而且为相关类设置了 Primary Table(主表)。



      注意

      如果有一个逻辑相关字段,就应选择一个主表。这会创建一个托管关系。




    3. 在直接链接表或通过联接表之间进行选择。

  1. 如果您的关系为“一对一”或“一对多”,请选择直接链接表。单击 Next(下一步),打开 Relationship Mapping(关系映射)编辑器的 Map to Key(映射到键)窗格。

    此窗格显示:


    • 一个现有映射 - 如果初始设置页上没有更改的话。


    • 默认映射 - 如果没有现有映射或映射不再有效的话。

      编辑器尝试根据现有外键确定两个相关类之间的最具逻辑性的键列对。如果没有外键,您需要通过选择本地列或外列,来创建键列对。每个对中的列可能有同样的值。

      要创建一个复杂键,请使用 Add Pair(添加对)按钮,添加附加 Key Column Pairs(键列对)。

      如果禁用 Finish(完成)按钮,则需要选择一个键列对。

  2. 如果您的关系为多对多关系,请通过联接表链接表。单击 Next(下一步),打开 Map to Key: Local to Join(映射到列:本地联接)窗格。

    此窗格显示:


    • 关系中的第一个类和字段


    • 用于在字段之间创建关系的联接表


    • 字段联接表与将相关类映射到的表之间的键列对

      在此窗格中,您选择一个联接表,然后将关系字段映射到一个键。这只是将“此类”映射到的表以及联接表之间的关系。如果您没有联接表,请返回到前一个面板,并选择 Link the Mapped Tables Directly(直接链接映射表)。

      选择一个位于将您的表映射到的两个表之间的联接表。编辑器将尝试在联接表与将“此类”映射到的表之间确定最具逻辑性的键列对。

      如果这两个表之间有一个外键,编辑器将把该外键用作默认键列对。如果没有外键,则必须通过选择一个允许从联接表导航到将“此表”映射到的表的列对,创建一个键。每个键列对中断列可以有同样的值。

      要创建一个复合键,请使用 Add Pair(添加对)来添加附加 Key Column Pairs(键列对)。

      如果禁用 Next(下一步)按钮,您需要选取一个联接表,或确保至少存在一个两边都有列的键列对。

  3. 单击 Next(下一步),打开 Map to Key: Join to Foreign(映射到键:连接到外键)窗格。

    在此窗格中,将一个此表与您在前一个窗格中选择联接表相关。

    编辑器将尝试确定联接表与将“相关类”映射到的表之间的最具逻辑性的键列对。

    如果这两个表之间存在一个外键,编辑器将把外键用作默认键列对。如果没有外键,则必须通过选择一个允许从联接表导航到将相关表映射到的表的列对,创建一个键。每个键列对中断列可以有同样的值。

    要创建一个复合键,请使用 Add Pair(添加对)来添加附加键列对。

    如果禁用 Finish(完成)按钮,您需要选择一个有效的键列对。


  4. 单击 Finish(完成),返回到 Mapping Tool(映射工具)的 Field Mappings(字段映射)窗格。

  5. 单击 Finish(完成),关闭 Field Mappings(字段映射)窗格,并将 Java 类映射到数据库schema。

EJB 持久性属性


使用容器管理持久性的 Enterprise Bean 多个可在 Mapping Tool(映射工具)外指定的独特属性。

下表描述这些独特属性。

CMP Enterprise Bean 的属性 


属性

说明

映射主表

 

为具有持久能力的类所选择的主表应是schema中最匹配该类的表。必须指定一个主表,才能映射具有持久能力的类。有关如何进行此操作的详细信息,请参阅“将现有 Enterprise Bean 映射到一个schema”

 

映射schema

 

包含把具有持久能力的类映射到的表的schema。主表、从表和相关类必须来自此schema。只有在捕获“捕获schema”中描述的schema之后,才能进行此设置。T

 

映射从表

 

从表允许您把不是主表组成部分的列映射到类字段。例如,您可能把一个 DEPARTMENT(部门)表作为一个从表进行添加,以便在 Employee(员工)类中包含一个部门名称。您可以添加多个从表,但没有一个从表是必需的。只有在设置了(映射主表)的情况下才启用此属性。有关添加从表的详细信息,请参阅第 98 页 221 页

 

移植性级别

 

指定保证 Bean 中数据事务一致性的容器行为。如果没有一致性检查标志元素就假定 none(无)。有关一致性级别的详细信息,请参阅“一致性”

 

Fetch 组

 

fetched-with 属性指定字段和关系的 fetch 组配置。一个字段可以参加分层或独立 fetch 组。如果 fetched-with 元素不存在,就假定以下值:<fetched-with><none/></fetched-with>。有关详细信息,请参阅“fetched-with”

 

通过从 Mapped Primary Table(映射主表)的下拉菜单中选择 <unmapped>,您可以撤消映射一个类。当您撤消映射一个当前映射的类时,如果存在字段映射或从表,就会出现一条警告。如果确信想要撤消映射类,请单击 OK(确定)。否则,单击 Cancel(取消),取消映射状态更改,并只映射类。

在 Properties(属性)窗口底部单击 Field Mapping(字段映射) 选项卡,查看具有持久能力的类的字段映射属性。


The screen capture shows the field mapping properties for a persistence-capable class.


上一部分 | 目录 | 索引 | 下一部分
Copyright 2002 Sun Microsystems, Inc. All rights reserved.