5 カスタム・メタデータを使用したSODAコレクション構成

SODAコレクションは高度な構成が可能です。コレクション・メタデータをカスタマイズして、デフォルトで提供されている動作とは異なる動作を取得できます。

ノート:

コレクション・メタデータをカスタマイズして、デフォルトで提供されている動作とは異なる動作を取得できます。ただし、一部のコンポーネントを変更するには、SQLデータ型などのOracle Databaseの概念をよく理解している必要があります。やむを得ない理由がないかぎり、そのようなコンポーネントは変更しないことをお薦めします。SODAコレクションはOracle Database表(またはビュー)の上に実装されるため、多くのコレクション・コンポーネントが基礎となる表構成に関連しています。

たとえば、コンテンツ列の型をデフォルト値からVARCHAR2に変更する場合、その影響(VARCHAR2のコンテンツ・サイズが32Kバイトに制限されること、文字セットの変換が発生する場合があることなど)を理解する必要があります。

関連項目:

既存コレクションのメタデータの取得

OracleCollectionAdminのメソッドgetMetadata()は、コレクションのすべてのメタデータをJSONドキュメントとして返します。

collectionName.admin().getMetadata();

関連項目:

Oracle Database Simple Oracle Document Access (SODA)の概要デフォルトのコレクション・メタデータの例

コレクションに対するカスタム・メタデータの作成

コレクション・メタデータはJSON OracleDocumentインスタンスとして表されます。このようなインスタンスは直接作成できますが、かわりにOracleRDBMSMetadataBuilderを使用することをお薦めします。これは、OracleRDBMSClientのメソッドcreateMetadataBuilder()を呼び出して取得します。

コレクションを作成するために2つの方法がインタフェースOracleDatabaseAdminで使用できます(OracleDatabaseオブジェクトでメソッドadmin()を呼び出してアクセスされます)。

createCollection(String collectionName);
createCollection(String collectionName, OracleDocument collectionMetadata);

最初の方法は、引数を1つのみ使用し、デフォルトのメタデータでコレクションを作成します。デフォルト・メタデータでは、データベース・スキーマ名、表名(コレクションを格納する表の場合)、5つの表列(キー、コンテンツ、バージョン、最終変更のタイムスタンプおよび作成時のタイムスタンプ)およびこれらの表列の詳細を指定します。各表列はJSONオブジェクトを持つフィールドによって値として表されます。このオブジェクトには、名前、SQL型などの列に関するその他の詳細が含まれています。

コレクションのデフォルト・メタデータは、Oracle Database Simple Oracle Document Access (SODA)の概要デフォルトのコレクション・メタデータに記載されています。

2つ目の方法は、2つの引数を使用し、JSON OracleDocumentオブジェクトの書式でカスタム・コレクション・メタデータを指定します。

createCollection()メソッドを起動するときに、同じ名前のコレクションがすでに存在する場合は、単にそのコレクションがオープンされ、そのオブジェクトが返されます。カスタム・メタデータがメソッドに渡され、そのメタデータが既存のコレクションのものと一致しない場合は、コレクションはオープンされずにエラーが発生します。(一致するには、すべてのメタデータ・フィールドが同じ値を保持している必要があります)。

メソッドcreateMetadataBuilder()では、デフォルト・コレクション・メタデータとともに事前ロードされたOracleRDBMSMetadataBuilderインスタンスを返します。この事前ロードされたメタデータを変更するには、カスタム・メタデータを作成するOracleRDBMSMetadataBuilderのメソッドをコールします。

これらのメソッドは様々なコレクション・メタデータ・コンポーネントに対応しています。これらのコンポーネントをカスタマイズするには、ビルダー・メソッドをチェーン方式で呼び出します。チェーンの最後にメソッドbuild()を呼び出してコレクション・メタデータをJSON OracleDocumentオブジェクトとして作成します。

例5-1に、これを示します。ここでは、OracleRDBMSMetadataBuilderを使用して、カスタム・メタデータ(メディア・タイプ列)を含むコレクションを作成します。メディア・タイプ列を使用すると、イメージやPDFドキュメントなど、単なるJSONデータ以外のドキュメントを格納できます。

この例では、最初にメソッドcreateMetadataBuilder()を使用してメタデータ・ビルダー・オブジェクトを作成します。次に、このオブジェクト上でビルダー・メソッドを呼び出して使用する特定のメタデータを定義し、build()を起動してそのメタデータでcollectionMetadataオブジェクトを作成します。最後に、このメタデータを含む新規コレクションを作成します。

この場合、指定したメタデータおよびこれを定義するメソッドは、次のとおりです。

メソッド メタデータ

mediaTypeColumnName()

メディア・タイプ列はMY_MEDIA_TYPE_COLUMNという名前になります。デフォルトでは、メディア・タイプ列はありません。

createCollection()メソッドを起動するときに、同じ名前のコレクションがすでに存在する場合は、単にそのコレクションがオープンされ、そのオブジェクトが返されます。カスタム・メタデータがメソッドに渡され、そのメタデータが既存のコレクションのものと一致しない場合は、コレクションはオープンされずにエラーが発生します。(一致するには、すべてのメタデータ・フィールドが同じ値を保持している必要があります)。

例5-1 カスタム・メタデータが含まれるコレクションの作成

OracleRDBMSClient cl = new OracleRDBMSClient();
OracleRDBMSMetadataBuilder b = cl.createMetadataBuilder();
OracleDatabase db = cl.getDatabase(jdbcConnection);
 
// Create custom metadata
OracleDocument collectionMetadata =
  b.mediaTypeColumnName("MY_MEDIA_TYPE_COLUMN").
    build();
 
// Create a new collection with the specified custom metadata
db.admin().createCollection("collectionName", collectionMetadata);

コレクション・メタデータ・コンポーネントのSODA for Javaメソッド

コレクション・メタデータ・コンポーネントを選択するためのOracleRDBMSMetadataBuilderメソッドについて説明します。

コレクション・メタデータ・コンポーネントを選択するためのOracleRDBMSMetadataBuilderメソッドには、選択したコンポーネントに似た名前が付けられます。

表5-1 コレクション・メタデータ・コンポーネントを選択するためのJavaメソッド

コンポーネント メソッド
スキーマ schemaName()
表またはビュー tableName()またはviewName()
キー列名 keyColumnName()
キー列の型 keyColumnType()
キー列の最大長 keyColumnMaxLength()
キー列の割当てメソッド keyColumnAssignmentMethod()
キー列の順序名 keyColumnSequenceName()
コンテンツ列名 contentColumnName()
コンテンツ列の型 contentColumnType()
コンテンツ列の最大長 contentColumnMaxLength()
コンテンツ列のJSON検証 contentColumnValidation()
コンテンツ列のSecureFiles LOB圧縮 contentColumnCompress()
コンテンツ列のSecureFiles LOBのキャッシュ contentColumnCache()
コンテンツ列のSecureFiles LOBの暗号化 contentColumnEncrypt()
バージョン列名 versionColumnName()
バージョン列の生成メソッド versionColumnMethod()
最終変更のタイムスタンプの列名 lastModifiedColumnName()
最終変更の列索引名 lastModifiedColumnIndex()
作成時のタイムスタンプの列名 creationTimeColumnName()
メディア・タイプ列名 mediaTypeColumnName()
読取り専用 readOnly()

関連項目:

ノート:

コレクション・メタデータ・コンポーネント(スキーマ名、表名、ビュー名、データベースの順序名および列名)に使用する識別子は有効なOracleの引用符付き識別子にする必要があります。脚注1Oracleの引用符付き識別子に許可されている一部の文字および単語はお薦めしません。詳細は、『Oracle Database SQL言語リファレンス』を参照してください



脚注凡例

脚注1:

リマインダ: 大文字/小文字を区別して解釈されるため、大文字/小文字は引用符で囲まれたSQL識別子では重要です。