ヘッダーをスキップ
Oracle Fusion Middleware Oracle TopLink開発者ガイド
11gリリース1(11.1.1)
B56246-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

112 TopLinkによるOracle Spatialのサポートの概要

この章では、TopLinkによるOracle Spatialのサポートの概要を説明するのみでなく、TopLinkの機能を拡張してOracle Spatialの列のマッピングと問合せ(MDSYS.SDO_GEOMETRY)をサポートする方法についても説明します。

Oracle Spatialの詳細は、http://www.oracle.com/technology/products/spatial/index.htmlを参照してください。

この章の内容は次のとおりです。

112.1 TopLinkによるOracle Spatialのサポート

TopLinkでは、タイプMDSYS.SDO_GEOMETRYのデータベース列の、oracle.spatial.geometry.JGeometryデータ・タイプの属性へのダイレクト・マッピングをサポートしています。

TopLinkは、TopLinkの式フレームワーク(第110章「TopLinkの式の概要」を参照)を介して空間演算子(112.3.3項「空間演算子式を使用した問合せの実行方法」を参照)もサポートするのみでなく、SDO_GEOMETRYをラップするカスタム・オブジェクト・タイプもサポートします。

OC4J以外のアプリケーション・サーバーでのTopLink構造コンバータの使用に関する詳細は、関連サーバーのドキュメントを参照してください。

TopLink構造コンバータを使用するためのOC4Jアプリケーション・サーバーの構成に関する詳細は、『Oracle Fusion Middleware Administration and Application Deployment Guide for Oracle Containers for Java EE』を参照してください。

112.2 構造コンバータの使用

TopLinkでは、oracle.toplink.platform.database.DatabasePlatform96.1.3.1項「データベース・プラットフォーム」を参照)で構造コンバータのリストを格納しています。

カスタム・コンバータを作成するには、oracle.toplink.platform.database.converters.StructConverterインタフェースを実装してフィールドへ直接マッピング(27.3項「フィールドへ直接マッピング」を参照)で登録します。

StructConverterを使用するには、次の手順を実行します。

  1. データベース・プラットフォームを構成します(112.2.1項「構造コンバータ使用のためのデータベース・プラットフォームの構成方法」を参照)。

  2. マッピングを設定します(112.2.2項「構造コンバータを使用したマッピングの設定方法」を参照)。

112.2.1 構造コンバータ使用のためのデータベース・プラットフォームの構成方法

TopLinkでは、データベース・プラットフォームを使用して(96.1.3.1項「データベース・プラットフォーム」を参照)、SQL言語、ストアド・プロシージャ・コール、順序付けなどデータベース・ベンダー固有およびバージョン固有の操作の使用方法のみでなく、プラットフォーム固有の処理も制御します。TopLinkでデータベースの高度な機能を使用できるようにプラットフォームを構成する必要があります。

DatabasePlatformに構造コンバータを追加するには、DatabasePlatformaddStructConverter(StructConverter converter)メソッドをコールします。セッション・ログイン前に、TopLinkセッション(サーバーまたはデータベース)内でこのメソッドをコールします(89.3項「セッション・ログインの構成」を参照)。

112.2.2 構造コンバータを使用したマッピングの設定方法

フィールドへ直接マッピング(27.3項「フィールドへ直接マッピング」を参照)を使用して、STRUCTタイプをマップします。構造コンバータによって定義されたタイプにマップする各マッピングについて、次のようにそのフィールド・タイプをSTRUCTデータ・タイプに設定します。

mapping.setFieldType(java.sql.Types.STRUCT);

112.3 JGeometryの使用

oracle.spatial.geometry.JGeometryを使用するには、次の手順を実行します。

  1. データベース・プラットフォームを構成します(112.3.1項「JGeometry使用のためのデータベース・プラットフォームの構成方法」を参照)。

  2. マッピングを設定します(112.3.2項「JGeometry属性のマップ方法」を参照)。

Spatial演算子を使用する式でマッピングされたエンティティを問合せできます。詳細は、112.3.3項「空間演算子式を使用した問合せの実行方法」を参照してください。

112.3.1 JGeometry使用のためのデータベース・プラットフォームの構成方法

データベース・プラットフォームを構成するには、oracle.toplink.platform.database.oracle.converters.JGeometryConverterの形式で構造コンバータを次のように追加します。

databasePlatform.addStructConverter(new JGeometryConverter());

セッション・ログイン前に、TopLinkセッション内でこのプラットフォームを構成する必要があります(89.3項「セッション・ログインの構成」を参照)。

112.3.2 JGeometry属性のマップ方法

フィールドへ直接マッピング(27.3項「フィールドへ直接マッピング」を参照)を使用して、STRUCTタイプをマップします。構造コンバータ(JGeometry)によって定義されたタイプにマップする各マッピングについて、次のようにそのフィールド・タイプをSTRUCTデータ・タイプに設定します。

mapping.setFieldType(java.sql.Types.STRUCT);

112.3.3 空間演算子式を使用した問合せの実行方法

構成済のデータベース・プラットフォームでは、JGeometry属性を持つSDO_GEOMETRY列にマッピングされた永続エンティティを読取りおよび書込みできます。このサポートによって、Oracle Spatial演算子を使用したネイティブSQL問合せで、これらのマッピングされたエンティティに対して問合せを実行できます(http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14255/sdo_operat.htm#i76448を参照)。

空間演算子はOracleデータベースによってサポートされている特殊なSQL関数で、ジオメトリ・タイプを含む列の問合せと比較を可能にします。空間演算子は次の形式をとります。

<SPATIAL-OP>(geometry1, geometry2, parameters) = 'TRUE'

空間演算子の詳細は、Oracle Spatial APIのドキュメントを参照してください。

そのoracle.toplink.expressions.spatialパッケージで、TopLinkは次の空間演算子に対して式をサポートしています。

  • SDO_WITHIN_DISTANCE

  • SDO_RELATE

  • SDO_FILTER

  • SDO_NN

oracle.toplink.expressions.spatial.SpatialExpressionFactoryクラスの次のメソッドを使用して、空間演算子を使用する式を作成します。

  • withinDistance

  • relate

  • filter

  • nearestNeighbor

これらすべてのメソッドに次の共通パラメータ・セットがあります。

  1. JGeometryを指す式(oracle.toplink.expressions.Expression)

  2. JGeometryオブジェクトまたはExpression

  3. ファンクション・コールに対するパラメータを定義するoracle.toplink.expressions.spatial.SpatialParametersオブジェクト

SpatialParametersクラスは、次のものを表すパラメータを設定できる簡便メソッドを用意しています。

  • 最小解像度

  • 最大解像度

  • ユニット

  • 距離

  • 問合せのタイプ

  • マスク

  • パラメータのString

例112-1は、空間演算子式を作成し、Stringを使用して作成されたSpatialParametersで既存のJGeometryに関連付ける方法を示します。

例112-1 SpatialParametersのStringを使用した式の関連付け

SpatialParameters parameters =
    new SpatialParameters("MASK=ANYINTERACT QUERYTYPE=WINDOW");
Expression selectionCriteria =
    SpatialExpressionFactory.relate(expressionBuilder.get("geometry"),
                                    rectangle,
                                    parameters);

例112-2は、簡便メソッドを使用して作成されたSpatialParametersで2つの式を関連付ける方法を示します。

例112-2 2つの式の関連付け

SpatialParameters parameters = new SpatialParameters();
parameters.setQueryType(
    SpatialParameters.QueryType.WINDOW.setMask(Mask.ANYINTERACT);
Expression selectionCriteria =
    SpatialExpressionFactory.relate(expressionBuilder1.get("geometry"),
                                    expressionBuilder2.get("geometry"),
                                    parameters);