Relationships
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

オブジェクト継承の使用

Liferay DXP 2025.Q1+/Portal GA132+

継承を有効にすることで、 1 対多の関係 を強化できます。 有効にすると、一対多の関係における 1 番目の オブジェクトが、子オブジェクトのエントリが継承する ルート オブジェクトになります。

継承が有効になっている場合、

  • 権限はルートオブジェクトから継承されます。
  • すべてのAPIエンドポイントは、ルートオブジェクトの下にグループ化されています。

Liferay DXP 2025.Q4およびPortal 2026.Q1以降では、単一のオブジェクト定義が複数の親の子となり、それぞれの親から属性を継承することが可能になりました。 各子エントリの権限と設定は、親エントリの定義に従って、親エントリから継承されます。 例えば、ユーザーを定義する際には、アドレスオブジェクト定義のフィールドを含めるのが理にかなっています。 ユーザーのスコープ内で作成された場合、アドレスエントリは親ユーザーエントリから継承されます。 一方、アドレス定義は、継承関係においてアカウントオブジェクトの子として使用される場合もあり、アカウントと同時に作成されたアドレスエントリは、アカウントから権限と構成を継承します。

オブジェクト定義レベルでの複数親継承のため、子オブジェクト定義では関係フィールドを必須項目として設定することはできません。 代わりに、各子オブジェクト定義の「スタンドアロンエントリを許可する」設定を使用して、そのエントリが親オブジェクトなしで存在できるかどうかを制御します。 スタンドアロンエントリが有効になっている場合、親エントリが定義された子オブジェクトエントリを作成することも、親エントリを持たないスタンドアロンエントリを作成することもできます。 スタンドアロンエントリは、自身のオブジェクト定義で定義された権限と構成を使用します。 スタンドアロンエントリの設定 を参照してください。

ルートオブジェクトの理解

アプリケーションによっては、複数のデータモデル(つまり、オブジェクト定義)で構成されているものもありますが、それらが統一されたモデルとして動作する方が便利です。 これらのアプリケーションでは、子エンティティが親エンティティ(つまり、ルートモデル)に強く依存するように定義することが有益となる場合があります。

カスタムオブジェクト間で一対多の関係を定義する際に、継承を有効にすることで、親オブジェクト定義を構造内のルートモデルにすることができます。

継承を有効にして、ルートオブジェクト階層を作成します。

変更不可能なシステムオブジェクト は継承に参加できません。 変更可能なシステムオブジェクトとカスタムオブジェクトは、どちらも同じスコープを共有している限り、どちらをルートとして継承に参加できます。 関係に修正不可能なシステムオブジェクトが含まれている場合、継承を有効にすると「システムオブジェクト定義は構成を継承できません」というメッセージが表示され、失敗します。

継承が有効になっている場合、

  • 子オブジェクト定義は、ルートオブジェクト定義から、 アカウント制限 を含む権限を継承します。
  • すべてのAPIエンドポイントは親エンドポイントの下にグループ化されます。

商取引注文アプリケーションでは、注文とその子注文アイテムエンティティは、注文をルートモデルオブジェクト定義として、一元的にアクセスおよび管理されるべきである。

Liferay では、 Dataset Manager Application (リリース機能フラグ) はルート モデルの概念を使用します。

データセットマネージャ(リリース機能ステータス)は、ルートオブジェクトの継承を使用します。

子エンティティと親エンティティ間で権限や設定を共有したい場合は、継承を使用してください。

スタンドアロンエントリの設定

Liferay DXP 2026.Q3+

少なくとも1つの継承関係の多側にあるオブジェクト定義は子定義であり、そのエントリが親エントリなしで存在できるかどうかを制御できます。 この設定は子オブジェクトの定義にのみ適用され、ルートオブジェクトの定義や継承関係のない定義には適用されません。

スタンドアロンエントリを許可する: 有効にすると、親オブジェクトなしでエントリを作成できます。 無効になっている場合は、親エントリを通してエントリを作成および管理する必要があります。

この設定はデフォルトで有効になっており、アップグレード前に存在していたカスタムオブジェクト定義にも適用されます。

  1. グローバルメニュー (Global Menu) → コントロールパネル → オブジェクト を開きます。

  2. 目的の子オブジェクト定義の編集を開始します。

  3. 詳細 タブで、 設定 パネルまでスクロールします。

  4. トグル スタンドアロンエントリを許可。

    「スタンドアロンエントリを許可する」トグルは、子オブジェクト定義の「詳細」タブにある「構成」パネルにあります。

  5. をクリックして保存します。

また、 モデルビルダー の右側のパネルから設定することもできます。 子定義のカードをクリックしてパネルを開きます。 そこでは、切り替えボタンからフォーカスを外すとすぐに設定が保存されるため、別途保存する手順は必要ありません。

スタンドアロンエントリが無効になっている場合、これらの領域が影響を受けます。 以下のパスでは、 objectParent はルートオブジェクト定義の REST コンテキストパスを表し、 objectRelationshipName は継承関係の名前です。 定義のRESTコンテキストパスには、その名称の小文字の複数形が使用されるため、定義名を推測するのではなく、オブジェクト定義に対してGETリクエストを実行した際に返されるrestContextPathフィールドから正確な値を読み取ってください。

エリア行動
コントロールパネルメニュー子アプリケーションはメニューから非表示になり、ページエディタではそのウィジェットが利用できません。
子REST API子オブジェクト自身の作成、読み取り、更新、削除操作はOpenAPI仕様には含まれなくなり、これらの操作を呼び出すと409 Conflict応答が返されます。 同じ操作は、子ノードのGraphQLスキーマからも削除されます。 バッチ処理、バージョン管理、翻訳、オブジェクト操作など、子プロセスが担当するその他の操作は引き続き動作します。
ネストされたREST APIネストされたエンドポイント /o/c/objectParent/{currentObjectEntryId}/{objectRelationshipName} は引き続き動作します。
輸出入センターその子供はもはや単独では登場しない。

設定を有効にする場合と無効にする場合では、動作が異なります。

  • スタンドアロンエントリを有効にすることは常に許可されており、変更は保存された時点で有効になります。
  • 子定義に親を持たないエントリが残っている間は、スタンドアロンのエントリを無効にすることはできません。 トグルはグレー表示され、その横にあるヘルプ アイコンにカーソルを合わせると、 スタンドアロン エントリの無効化は許可されていません というメッセージが表示されます。「このオブジェクトには既存のスタンドアロン エントリがあります。 スタンドアロンエントリを無効にするには、まずこのオブジェクトのすべてのスタンドアロンエントリを削除する必要があります。 それらのエントリを削除すると、切り替え機能が利用可能になります。

リレーションシップの継承を無効にする

継承を無効にできるかどうかは、子定義の「スタンドアロンエントリを許可する」設定によって異なります。

  • 子定義の最後の継承関係を無効にすると必ず成功し、その定義はもはや子定義ではないため、設定は表示されなくなります。 この定義は、独自のアプリケーションとREST APIを取り戻します。
  • スタンドアロンのエントリが無効になっている場合、エントリがそのエントリを介してリンクされている場合、複数の継承関係のうちの1つを無効にすることはできません。 Liferay DXP は「このオブジェクトには、すべてのエントリに親が必要です」と報告します。 継承を無効にするには、まずこのオブジェクトのリンクされたエントリを削除するか、スタンドアロンのエントリを有効にする必要があります。
  • スタンドアロンエントリが有効になっている場合、複数の継承関係のうちの1つを無効にすると成功し、その継承関係を介してリンクされているエントリはスタンドアロンになります。

いずれの場合も、影響を受けるエントリに関する進行中のワークフローインスタンスをまず完了させる必要があります。

スタンドアロンエントリが無効になっている状態で権限を設定する

スタンドアロンエントリが無効になっている間は、 権限の定義 画面で子定義用に構成された権限は無効になります。 親エントリを持つエントリは、この設定の値に関係なく、子エントリの定義ではなく、階層のルートエントリから表示、更新、削除、および権限のチェックを取得します。 オブジェクトアクションとオブジェクトフィールドの権限は、引き続き子定義で解決されます。

画面は引き続き表示されるため、スタンドアロンエントリを有効にする前に、お子様の権限を設定できます。 「単独のエントリは無効になっています」というバナーが表示されます。 これらの権限の一部は現在無効になっており、オブジェクトの設定でスタンドアロンエントリが有効になったときに有効になります。

子定義もプロセスビルダーに一覧表示されるため、スタンドアロンエントリを有効にする前にワークフローを設定できます。

UIにおける継承の識別

モデルビルダー 図は各オブジェクト定義カードにラベルを付け、定義を開くとツールバーにも同じラベルが表示されます。

ラベル意味
ルートオブジェクト定義は継承階層の最上位に位置します。
受け継いだ定義としては、相続関係にある子供を指します。 親と子の両方に該当する定義は、「継承」とラベル付けされます。
標準この定義には継承関係はありません。

モデルビルダーは、各オブジェクト定義カードに「ルートオブジェクト」、「継承」、「標準」のいずれかのラベルを付けます。

「継承」ラベルには、スタンドアロンエントリが無効になっている場合はロックアイコンが表示され、有効になっている場合はロック解除アイコンが表示されます。 ラベルにカーソルを合わせると、対応するツールチップが表示されます。

ロック解除アイコン: エントリは独立して存在することも、親にリンクすることもできます。 APIがリンクされると、親の下にグループ化され、エントリは親の権限とワークフローを継承します。

ロックアイコン: エントリには親が必要です。 それらのAPIは親クラスのAPIの下にグループ化され、親クラスの権限とワークフローを継承します。

オブジェクト管理APIを使用してスタンドアロンエントリを許可する設定を行う

設定は、トップレベルのフィールドとしてではなく、オブジェクト定義の objectDefinitionSettings 配列に表示されます。 変更するには、 PATCH リクエストを /o/object-admin/v1.0/object-definitions/{objectDefinitionId} に送信します。 PATCH を PUTの代わりに使用してください。 PUT は定義全体を置き換え、すべてのフィールドを必要とするため、 objectDefinitionSettings のみを含むボディは同じ操作ではありません。

{
    "objectDefinitionSettings": [
        {
            "name": "allowStandaloneObjectEntry",
            "value": "false"
        }
    ]
}

上記の例では、変更された要素のみを示しています。 まず GET を送信し、変更を適用した完全な objectDefinitionSettings 配列を返します。 部分配列は定義の書き込み可能な設定を置き換えるため、省略したその他の設定はすべて削除されます。 allowStandaloneObjectEntry は例外であり、省略してもその値を保持します。 値は文字列であり、 "true" または "false"のいずれかでなければなりません。それ以外の値を指定すると、400 エラーが返されます。

定義に継承関係がない場合、新しい定義にはまだ継承関係がないため、 POSTを含め、設定は無視されます。 リクエストはエラーなく成功するので、継承関係が確立された後の呼び出しで値を設定してください。 子定義に親を持たないエントリが残っている状態で、スタンドアロンエントリを無効にすると、400エラーが返されます。

ベース URL、認証、および API エクスプローラについては、 ヘッドレス API を使用したオブジェクトの管理 を参照してください。

ルートオブジェクトを使用したワークフロー

Liferay DXP 2025.Q3+

継承が有効になっている場合、子オブジェクトのエントリは親オブジェクト定義のワークフロー構成を使用します。 例えば、以下の図に示すオブジェクト定義のうち、ワークフローでアクティブ化できるのは「国」のみです。

親オブジェクト定義は複数の子オブジェクトを持つことができます。

親ノードまたはその子ノードのいずれかに変更を加えると、ルートモデル全体(親ノードと子ノードを含む)がワークフローに組み込まれます。 したがって、子エントリを変更すると、その親エントリもワークフローに反映されます。 その親が別の継承構造のルートにある場合、その親に関連するすべての子もワークフローに含まれることになります。 通知が1件送信され、ワークフロータスクを1件完了する必要があります。

「国」という親オブジェクト定義と、「地域」と「都市」という2つの子オブジェクト定義を考えてみましょう。 両方の関係において継承が有効になっています。 この構造では、国ごとに単一承認者ワークフローを有効にすることができます。 一度有効化されると、都市を追加または更新すると、ワークフロー内で地域のエントリが 保留 になります。これは、親の国が保留状態になり、継承が有効になっている場合、地域のステータスが親に依存するためです。