アソシエーション間の移動¶
Virtual DataPort では、2 つのビューの間にリレーションシップ (アソシエーション) を定義できます。 country
ビューのエレメントを city
ビューのエレメントに関連付けることができるアソシエーションを以下の図に示します。すべての country
が 0 個以上の city
に関連付けられます。

country と city との間のアソシエーション¶
OData サービスのサービスメタデータドキュメントでは、このリレーションシップを ナビゲーションプロパティ として表現します。
<EntityType Name="country">
<Key>
<PropertyRef Name="country_id"/>
</Key>
<Property Name="country_id" Type="Edm.Int16"
Nullable="false"/>
<Property Name="country" Type="Edm.String" MaxLength="50"/>
<Property Name="last_update" Type="Edm.DateTimeOffset"
Precision="19"/>
<NavigationProperty Name="cities"
Type="Collection(com.denodo.odata4.city)"
Partner="country">
<ReferentialConstraint Property="country_id"
ReferencedProperty="country_id"/>
</NavigationProperty>
</EntityType>
関連するエントリに対するクエリの実行¶
OData サービスを使用すると、特定のエンティティに関連するすべてのエンティティを取得するために、ビューで定義されているアソシエーションをたどることができます。この操作では ナビゲーションプロパティ を使用します。
/denodo-odata.svc/<database name>/collectionName(key)/navigationPropertyName
たとえば、 city
エンティティタイプまで移動する cities
を、 country
エンティティタイプでナビゲーションプロパティとして、以下のように記述します。
/denodo-odata.svc/movies/country(2)/cities
応答は以下のようになります。
{
"@odata.context": "/denodo-odata.svc/movies/$metadata#city",
"value": [
{
"city_id": 59,
"city": "Batna",
"country_id": 2,
"last_update": "2006-02-15T11:45:25Z"
},
{
"city_id": 63,
"city": "Bchar",
"country_id": 2,
"last_update": "2006-02-15T11:45:25Z"
},
{
"city_id": 483,
"city": "Skikda",
"country_id": 2,
"last_update": "2006-02-15T11:45:25Z"
}
]
}
関連するエンティティの参照¶
特定の 1 つのエンティティに関連するエンティティのコレクションへの参照を取得できます (実際のエンティティへの参照ではありません)。
これを取得するには、以下のように $ref
を URL に追加します (古い構文 /$links/
は OData 4 で廃止されています)。
/denodo-odata.svc/<database name>/collectionName(key)/navProp/$ref
以下に示す URL を使用すると、 country(2)
エントリに関連付けられているすべての city
の参照が、ナビゲーションプロパティ cities
を使用して表示されます。
/denodo-odata.svc/movies/country(2)/cities/$ref
応答は以下のようになります。
{
"@odata.context": "/denodo-odata.svc/movies/$metadata#cities",
"value": [
{
"@odata.id": "city(59)"
},
{
"@odata.id": "city(63)"
},
{
"@odata.id": "city(483)"
}
]
}