前提
前回投稿からの発展型ですので、DIHに関する設定等は省略する。
なので、データはPostgreSQLのチュートリアルにあるDVDレンタルデータを使用する。
結合は、フィルムテーブルにカテゴリテーブルを結合する。但し、チュートリアルのにER図より、フィルム・カテゴリーテーブルを介して結合する必要がある。
SQLで書くと
select f.film_id id, ct.name category_name, f.title, f.description
from film f
inner join film_category fc
on fc.film_id = f.film_id
inner join category ct
on ct.category_id = fc.category_id
となる取込みは、
db-data-configでは
<entity name="film" query="select * from film" >
<field column="film_id" name="id" />
<field column="title" name="title" />
<field column="description" name="description" />
<entity name="film_category" query="select category_id from film_category where film_id='${film.film_id}'" >
<entity name="category" query="select name from category where category_id='${film_category.category_id}'" >
<field column="name" name="category_name" />
</entity>
</entity>
</entity>
となるみたいです。
データフィールドの追加
今回追加したデータフィールドは、「category_name」だけだったと思います。(作業メモを取ってなく、後から思い出して書きました)
注意:前回の投稿で「city」フィールドを追加しましたが、今回未使用となり、「city」を削除しておかないと取込みでエラーになります。
取込み
取込みは、前回の投稿と同じです。
クエリーで確認
qに「category_name:family && description:student」と入力し、「Execute Query」ボタンをクリックする。
検索結果は、以下の通り。
{
"responseHeader":{
"status":0,
"QTime":4,
"params":{
"q":"category_name:family && description:student",
"_":"1562462403529"}},
"response":{"numFound":9,"start":0,"docs":[
{
"description":"A Emotional Documentary of a Student And a Girl who must Build a Boat in Nigeria",
"title":["Blanket Beverly"],
"id":"80",
"category_name":"Family",
"_version_":1638303411597213696},
{
"description":"A Astounding Reflection of a Explorer And a Dentist who must Pursue a Student in Nigeria",
"title":["Jedi Beneath"],
"id":"479",
"category_name":"Family",
"_version_":1638303422835851264},
{
"description":"A Taut Story of a Pioneer And a Squirrel who must Battle a Student in Soviet Georgia",
"title":["House Dynamite"],
"id":"437",
"category_name":"Family",
"_version_":1638303421771546624},
{
"description":"A Insightful Display of a Database Administrator And a Student who must Build a Hunter in Berlin",
"title":["Movie Shakespeare"],
"id":"603",
"category_name":"Family",
"_version_":1638303426342289408},
{
"description":"A Thrilling Epistle of a Boy And a Boat who must Find a Student in Soviet Georgia",
"title":["Pittsburgh Hunchback"],
"id":"682",
"category_name":"Family",
"_version_":1638303428390158336},
{
"description":"A Fateful Tale of a Database Administrator And a Squirrel who must Discover a Student in Soviet Georgia",
"title":["Virtual Spoilers"],
"id":"946",
"category_name":"Family",
"_version_":1638303435516280832},
{
"description":"A Awe-Inspiring Tale of a Girl And a Madman who must Outgun a Student in A Shark Tank",
"title":["Hocus Frida"],
"id":"419",
"category_name":"Family",
"_version_":1638303421262987264},
{
"description":"A Fanciful Character Study of a Student And a Explorer who must Succumb a Composer in An Abandoned Mine Shaft",
"title":["Killer Innocent"],
"id":"498",
"category_name":"Family",
"_version_":1638303423327633408},
{
"description":"A Thrilling Panorama of a Pastry Chef And a Secret Agent who must Overcome a Student in A Manhattan Penthouse",
"title":["Spartacus Cheaper"],
"id":"824",
"category_name":"Family",
"_version_":1638303432338046976}]
}}
考えたこと
今回は、リファレンスガイドの内容を試してたかったのでentityのネストになりましたが、entityの「query」属性にjoinを書いたらダメかな!?