2017-02-14 6 views
1

で、私は3つのテーブルがあります。ActiveJdbcで多対多の余分なフィールドactivejdbc

person (person_id, person_name), 
game (game_id, game_name) 

とリンクテーブル

play(person_id, game_id, score). 

私はmany2manyアノテーションを使用し、それがためにすべてのゲームを取得するために正常に動作します1人

List<Game> games = person.get(Game.class, "person_id = ?", personId); 

私の質問は「スコア」の値を取得する方法ですか? 私はgame.getScore()を試しましたが、明らかに動作しませんでした

編集: 私はゲームの完全なリストを1人から欲しいです。ここのようなものであるべきで、私はSQLで

game1 | 21 
game2 | 33 
game3 | 44 

を望む結果である:

select game.name, play.score 
from game join play on (game.game_id = play.game_id) 
join person on (game.person_id = person.person_id) 
where person_id = 1; 

答えて

1

があり、これを行うための複数の方法は、おそらくですが、ここで方法です。多対多の関係は、プレイが人とゲームの両方の子である2つの1対多の関係として考えることができます。 http://javalite.io/lazy_and_eager:あなたも最適化し、少数のクエリを実行しているinclude()使用することにより

List<Play> plays = Play.where("person_id = ?", 1).include(Person.class, Game.class); 

:その後、別の角度からのアプローチ。

クエリの条件に応じて、あなただけの1プレイかもしれません。もちろん場合は、あなたがあなたのスコアを取得することができるだろう

Game game = plays.get(0).parent(Game.class); 
Person = plays.get(0).parent(Person.class); 

を:

int score = plays.get(0).getScore(); 

はそれが役に立てば幸い!

+0

私の投稿を編集していただきありがとうございます。あなたの答えは本当に分かりません。私が欲しいのは、プレイのリスト+ 1人の与えられた人のスコアを表示することです。私は自分の投稿を編集しました。しかし、あなたの答えから、私は "ゲーム"から得点を得なければなりませんが、私のモデル( "ゲーム")では私は "getScore"メソッドを持っていません。 .myapp.models.Game。私がJSPページで使用すると、 – Rony

+0

私のコードに誤字があり、ただ修正されました。あなたはプレイのスコアを持っているので、そのオブジェクトからスコアを得ることができます。 – ipolevoy

+0

ああ!とった!今すぐ動作します、あなたが言ったようにインクルードを使用しました:)ありがとうございました! – Rony

関連する問題