Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

クラスへのリレーションシップの追加

リレーションシップは、2 つ以上のオブジェクト・インスタンスの相互の関連性を定義する、特別なプロパティのタイプです。例えば、企業を表す Company クラスが、社員を表す Employee クラスとの一対多のリレーションシップを持っているという場合です (つまり、1 つの企業には 1 人、または複数の社員が在籍し、各社員は特定の企業と関連しているということです)。

リレーションシップは、プロパティとは異なります。すべてのリレーションシップは 2 つで 1 組みです。リレーションシップのすべての定義には、対応する逆のリレーションシップがあり、それが反対側を定義します。

リレーションシップの詳細は、"Caché オブジェクトの使用法" の "リレーションシップ" の章を参照してください。

新規のリレーションシップをクラス定義に追加するには、以下の 2 つの方法があります。

  • クラス・エディタを使用してクラス定義にリレーションシップを追加する方法

  • 新規プロパティ・ウィザードを使用する方法

クラス・エディタを使用してリレーションシップを追加するには、クラス・エディタの空の行にカーソルを置き、リレーションシップ宣言を入力します。

Class MyApp.Company Extends %Persistent 
{
Relationship TheEmployees As Employee [cardinality=many, inverse=TheCompany];
}

リレーションシップ定義では、cardinality と inverse の両方のキーワードに値を指定する必要があります。

このリレーションシップには 2 つの双方向の関係があるので、Employee のクラス定義には逆のリレーションシップも入力します。

Class MyApp.Employee Extends %Persistent 
{
Relationship TheCompany As Company [cardinality=one, inverse=TheEmployees];
}

両方のリレーションシップが正しく相互に対応していない場合、コンパイル時にエラーが返されます。

リレーションシップ・プロパティを作成する新規プロパティ・ウィザード

新規プロパティ・ウィザードを使用して、新規のリレーションシップ・プロパティを作成できます。このウィザードを起動するには、[クラス]→[追加]→[プロパティ] を使用します。または、クラス・インスペクタで右クリックして [新規プロパティ] を選択するか、ツールバーで [新規プロパティ] を選択することもできます。

新規プロパティ・ウィザードでは、情報の入力が促されます。この手順は、プロパティ・タイプで リレーションシップ を選択することを除けば、新規の非リレーションシップ・プロパティを作成する手順と同じです。

名前および説明ページ

新規プロパティ・ウィザードで、以下の情報の入力が促されます (これらの値は後で変更できます)。

プロパティ名

(必須) リレーションシップの名前。これは、有効なリレーションシップ (プロパティ) 名である必要があります。また、定義済みの既存のリレーションシップやプロパティと同じ名前を付けることはできません。

名前の概要は、“Caché オブジェクトの使用法” の “Caché クラス” の章を参照してください。

説明

(オプション) 新規リレーションシップに関する説明。この説明は、クラス・ドキュメントがオンライン・クラス・ライブラリ・ドキュメントで表示されるときに使用されます。

説明には、HTML フォーマット・タグを記述することもできます。詳細は、"Caché オブジェクトの使用法" の “クラスの定義とコンパイル” の章の “クラス・ドキュメントでの HTML マークアップの使用” を参照してください。

プロパティ・タイプ・ページ

新規プロパティ・ウィザードでは、各種のプロパティ・タイプが表示されます。リレーションシップを選択し、もう一方のリレーションシップのクラス名を入力します。

リレーションシップの特性ページ

新規プロパティ・ウィザードでは、追加のリレーションシップ属性の入力が促されます。これには、以下のものがあります。

Cardinality

一 : 他方の 1 つのオブジェクト

このリレーションシップ・プロパティは、1 つの関連するオブジェクトのインスタンスを参照します。結果のプロパティは、単純な参照フィールドとして動作します。

多 : 他方の複数のオブジェクト

このリレーションシップ・プロパティは、複数の関連するオブジェクトのインスタンスを参照します。結果のプロパティは、オブジェクトのコレクションとして動作します。

親 : このオブジェクトの親

のカーディナリティと同じですが、このプロパティは、依存したリレーションシップであり、このオブジェクトの親を参照する点が異なります。メモ : 親子リレーションシップを作成すると、子は個別に格納されるのではなく、親内に格納されるため、インデックスの作成を選択できません。これは、グローバル構造を見ることで理解できます。子には、追加の添え字を作成することにより、自動的にインデックスが付けられます。

子 : このオブジェクトの子

のカーディナリティと同じですが、このプロパティは、依存したリレーションシップであり、子オブジェクトのコレクションを参照する点が異なります。

Inverse :

このリレーションシップ・プロパティは以下のタイプのオブジェクトを参照します。

[参照] ボタンからクラスを選択するか、逆リレーションシップの新規クラス名を入力します。

参照されたクラス内の対応するプロパティの名前は、以下のとおりです。

クラスからプロパティを選択するか、逆リレーションシップの新規プロパティ名を入力します。

その他の変更

実装するその他の変更を選択します。

新規クラス “<inverse class>” の作成

このフィールドは、最後の画面で逆リレーションシップにないクラス名を入力した場合に有効になります。これを選択すると、このパッケージでクラスを作成できます。作成した新規クラスはパッケージに追加されます。リレーションシップが含まれたクラスをコンパイルするには、その前に新規クラスをコンパイルする必要があります。

クラス “<inverse class>” での新規プロパティ “Parent” の作成

このフィールドは、最後の画面で逆リレーションシップにないプロパティを入力した場合に有効になります。これを選択すると、最後の画面で指定したパッケージとクラスでプロパティを作成できます。作成した新規プロパティはクラスに追加されます。リレーションシップが含まれたクラスをコンパイルするには、その前にこの新規プロパティが含まれたクラスをコンパイルする必要があります。

クラス “<inverse class>” のプロパティ “Parent” の変更

このプロパティは、最後の画面で逆リレーションシップに存在するプロパティを入力した場合に有効になります。これを選択すると、そのプロパティがこのプロパティとリレーションシップを持つように変更できます。

このリレーションシップのインデックスを定義します。

チェックを付けると、このプロパティのインデックスを定義できます。これは、一対多リレーションシップにのみ適用されます。親子リレーションシップでは無効になります。

新規プロパティ・ウィザードで新規のリレーションシップを作成した結果

新規プロパティ・ウィザードで新規リレーションシップを作成した後、クラス・エディタ・ウィンドウは更新され、新規のリレーションシップ定義が表示されます。以下に例を示します。

/// This is an Employee class
class MyApp.Employee extends %Persistent
{

/// We have a one-to-many relationship with Company
Relationship Company As Company [cardinality=one, inverse=Employees];
}

このリレーションシップをさらに変更する場合は、クラス・エディタ、またはクラス・インスペクタを使用します。

また、リレーションシップ・ウィザードを使用すると、もう一方のリレーションシップに必要な変更を自動的に決定することができます。

リレーションシップ・ウィザードを起動する手順は、以下のとおりです。

  1. クラス・インスペクタで、プロパティのリストを表示します。

  2. プロパティ・リスト内の目的のリレーションシップを右クリックし、ポップアップ・メニューから [リレーションシップの追加/変更] コマンドを選択します。

FeedbackOpens in a new tab