5 カスタム・メタデータを使用したSODAコレクション構成
SODAコレクションは高度な構成が可能です。コレクション・メタデータをカスタマイズして、デフォルトで提供されている動作とは異なる動作を取得できます。
ノート:
コレクション・メタデータをカスタマイズして、デフォルトで提供されている動作とは異なる動作を取得できます。ただし、一部のコンポーネントを変更するには、SQLデータ型などのOracle Databaseの概念をよく理解している必要があります。やむを得ない理由がないかぎり、そのようなコンポーネントは変更しないことをお薦めします。SODAコレクションはOracle Database表(またはビュー)の上に実装されるため、多くのコレクション・コンポーネントが基礎となる表構成に関連しています。
たとえば、コンテンツ列の型をデフォルト値からVARCHAR2
に変更する場合、その影響(VARCHAR2
のコンテンツ・サイズが32Kバイトに制限されること、文字セットの変換が発生する場合があることなど)を理解する必要があります。
関連項目:
-
SODAドキュメントのコレクションとそのメタデータに関する一般情報は、『Oracle Database Simple Oracle Document Access (SODA)の概要』を参照してください
-
コレクション・メタデータのコンポーネントに関するリファレンス情報は、『Oracle Database Simple Oracle Document Access (SODA)の概要』を参照してください
既存コレクションのメタデータの取得
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
オブジェクトを作成します。最後に、このメタデータを含む新規コレクションを作成します。
この場合、指定したメタデータおよびこれを定義するメソッドは、次のとおりです。
メソッド | メタデータ |
---|---|
|
メディア・タイプ列は |
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() |
関連項目:
-
コレクション・メタデータ・コンポーネントの詳細は、
OracleRDBMSMetadataBuilder
のメソッドのJavadocを参照してください
ノート:
コレクション・メタデータ・コンポーネント(スキーマ名、表名、ビュー名、データベースの順序名および列名)に使用する識別子は有効なOracleの引用符付き識別子にする必要があります。脚注1Oracleの引用符付き識別子に許可されている一部の文字および単語はお薦めしません。詳細は、『Oracle Database SQL言語リファレンス』を参照してください
脚注凡例
脚注1:リマインダ: 大文字/小文字を区別して解釈されるため、大文字/小文字は引用符で囲まれたSQL識別子では重要です。