JDBC DMS 的动态和静态对象类型
服务数据对象 (SDO) 1.0 中的 DataObject 可以使用静态类型和动态类型。如果您知道特定 dataGraph 模式符合所有应用程序查询要求,那么可以生成静态 SDO 代码以获得潜在的运行时益处。
通过使用动态类型,在运行时就能完成 DataGraph 的构造。JDBC 数据介体服务 (DMS) 根据创建时提供的元数据创建 DataGraph 模式。JDBC DMS 只需要元数据和到数据源的连接来产生使用动态类型化的 Datagraph。对于创建 JDBC DMS,这是一种缺省方法。
如果您知道开发时 DataGraph 的外形,那么您可以使用代码生成者来生成简化 Datagraph 导航的强类型化的接口(静态数据 API 代码)、提供更好的编译时错误检查以及提高性能。有关用来生成静态 SDO 代码的元模型的更多信息,请参阅 SDO 1.0 规范的简介。该简介包含规范作用域要求的列表,可在其中找到有关静态数据 API 支持的简要讨论。请注意,当使用强类型化 DataObject 时,动态 API 仍可用。
借助于代码生成者,可为 DataGraph 中的每个 DataObject 类型创建类。对于 DataObject 中的每个属性,每个类都包含 getter() 和 setter() 方法。这使得客户机能够调用类型安全的方法,而不是传递属性名。例如,生成的类型可以包含 DataObject.getCustFirstName() 方法而不是调用属性 DataObject.get(“CUSTFIRSTNAME”)。如果您访问相关的 DataObject,那么存取器会返回强类型化的 DataObject,而不是常规 DataObject。例如,DataObject.get(“Customers_Orders”) 返回 DataObject,但是 DataObject.getOrders() 返回类型为 Order 的对象。
要通过 JDBC DMS 使用静态建立类型,需要为 JDBCMediatorFactory 类 create 方法提供元数据到数据源的连接和 Datagraph 模式。在此情况下,JDBC DMS 元数据不会确定 Datagraph 的形式,但是给出关于后端数据源及其映射至 Datagraph 的方法的 DMS 信息。
当使用强类型化的 DataObject,确保查询与 Datagraph 模式相匹配很重要。查询无需填满模式中的所有数据对象和属性,但是查询无法返回 DataGraph 模式中未定义的数据对象或属性。例如,Datagraph 模式可以定义 Customer 和 Order DataObject,但是查询可能只返回 Customer 对象。同时,Customer 对象可以定义 ID、Name 和 Address 属性,但是查询可能不返回 address。在此情况下,address 属性值为 null,并且当调用 applyChanges() 方法时不会在数据库中更新该值。在此示例中,查询不会返回 Phone 属性,因为 Customer 对象上没有将它定义为属性。当查询尝试此操作时,DMS 会返回无效元数据异常。