Anorm Parserがaliasを無視する
Play frameworkで、素直にAnorm使ってDB接続してるんですが、例えば
のように、SQLでaliasを指定した場合にも、Anormはaliasを無視するようです。
バージョンアップしたら解決されてないかなあと思いPlay framework 2.0.x~2.2.xまで全部試してみたのですが解決されておりませんでした。(2.3.xは未確認)
調べてみたところ、lambda me : Play2のAnormでalias名がスルーされた - Playframeworkという記事にあたり、なんとなくの原因はわかりました。
ということで、viewを追加します。
ちょっと不便そうな気がするのですが、うーん。
SQL(""" select * from tableA as t0 left join * from tableB as t1 on(t0.c1=t1.id) left join * from tableC as t2 on(t0.c2=t2.id) """).as( long("t0.id") ~ long("t1.id") ~ long("t2.id") map { // .....(略)..... })
のように、SQLでaliasを指定した場合にも、Anormはaliasを無視するようです。
バージョンアップしたら解決されてないかなあと思いPlay framework 2.0.x~2.2.xまで全部試してみたのですが解決されておりませんでした。(2.3.xは未確認)
調べてみたところ、lambda me : Play2のAnormでalias名がスルーされた - Playframeworkという記事にあたり、なんとなくの原因はわかりました。
ということで、viewを追加します。
1.evolutionファイルを書き換える
Upsに欲しいviewを作成する処理を、Downsにviewをdropする処理を加えます。create view tableA_B_C as select t0.id as t0_id, t1.id as t1_id, t2.id as t2_id from tableA as t0 left join tableB as t1 on(t0.c1=t1.id) left join tableC as t2 on(t0.c2=t2.id);
2.evolutionを走らせる
走らせましょう。3.SQLを書き直す
こんな感じ。SQL("select * from tableA_B_C").as( long("t0_id") ~ long("t1_id") ~ long("t2_id") map { // .....(略)..... })他所のQuestionページでも同様のトラブルにあっている人がいましたが、だいたいの場合、viewを作成してねというアドバイスがなされているので、ある種のデファクトなんですかね。
ちょっと不便そうな気がするのですが、うーん。
参考
- lambda me : Play2のAnormでalias名がスルーされた - Playframework
- playframework - How to understand result parser of play2's anorm? - Stack Overflow
- [play-framework] [2.1.1 Scala] Parsing left joins using anorm - Grokbase
New slot machines, blackjack, slots - DrmCD
返信削除All the latest video slots, blackjack, 군산 출장마사지 slots and 광주광역 출장샵 progressive jackpots are 오산 출장샵 coming to the Nintendo Switch and Arcade Pad 목포 출장샵 later this year, 익산 출장안마 as well as on the