2017-02-14 1 views
1

У меня есть 3 таблицы:Многие-ко-многим дополнительным полем в activejdbc

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

и связанную таблицу

play(person_id, game_id, score). 

С ActiveJdbc я использую many2many аннотацию и она отлично работает, чтобы получить все игры для 1 человек

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

Мой вопрос в том, как получить значение «оценка»? Я пробовал game.getScore(), но он, очевидно, не работал

Редактировать: Мне нужен полный список игр от 1 человека. Вот результат я хочу

game1 | 21 
game2 | 33 
game3 | 44 

В SQL в должно быть что-то вроде:

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

Существует, вероятно, больше, чем один из способов сделать это, но вот путь. Вы можете думать о взаимоотношениях «многие-ко-многим» как о двух отношениях «один-ко-многим», где «Игра» является ребенком как «Человек, так и игра». Тогда вы подходите под другим углом:

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

С помощью include() вы также оптимизации и работает меньше запросов: http://javalite.io/lazy_and_eager.

В зависимости от условий запроса, вы можете иметь только одну игру:

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

Если, конечно, вы сможете получить на ваш счет:

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

надеюсь, что это помогает!

+0

ОК, спасибо за редактирование моего сообщения. Для вашего ответа я действительно не понимаю. Я хочу отобразить список пьес + оценка для 1 данного человека. Я редактировал свой пост. Но из вашего ответа я должен получить оценку от «игры», но в моей модели («Игра») у меня нет метода «getScore», который приводит меня к: «Счету свойства» не найдено по типу com .myapp.models.Game. когда я использую его на странице jsp – Rony

+0

У меня была опечатка в моем коде, просто исправлена. Поскольку у вас есть счет в Play, вы можете получить его от этого объекта. – ipolevoy

+0

ах ок! Понял! Работает сейчас, я использовал включение, как вы сказали :) Большое спасибо! – Rony

Смежные вопросы