2017-02-14 2 views
1

Ich habe 3 Tabellen:Many-to-Many zusätzliches Feld in activejdbc

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

und die verknüpfte Tabelle

play(person_id, game_id, score). 

Mit ActiveJdbc ich many2many Annotation verwenden und es funktioniert gut, alle Spiele zu bekommen für 1 Person

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

Meine Frage ist, wie man den Wert "score" bekommt? Ich versuchte game.getScore(), aber es hat offensichtlich nicht funktioniert

edit: Ich möchte die komplette Liste des Spiels von 1 Person. Hier ist das Ergebnis, das ich

will
game1 | 21 
game2 | 33 
game3 | 44 

In SQL in sein sollte, so etwas wie:

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; 

Antwort

1

Es wahrscheinlich mehr als ein Weg, dies zu tun ist, aber hier ist ein Weg. Sie können sich eine Viele-zu-Viele-Beziehung als zwei Eins-zu-Viele-Beziehungen vorstellen, in denen Spiel ein Kind sowohl von Person als auch von Spiel ist. Dann nähern Sie aus einem anderen Blickwinkel:

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

von include() verwenden Sie auch optimieren und weniger Abfragen ausgeführt werden: http://javalite.io/lazy_and_eager.

Je nach Abfragebedingungen, könnten Sie haben nur ein Spiel:

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

Wenn Natürlich würden Sie in der Lage sein, um Ihre Gäste zu erhalten:

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

hoffe, es hilft!

+0

ok, danke für die Bearbeitung meiner Post. Für deine Antwort verstehe ich das nicht wirklich. Was ich will, ist die Liste der Spiele + Score für 1 gegebene Person anzuzeigen. Ich habe meinen Beitrag bearbeitet. Aber von deiner Antwort muss ich die Punktzahl von "Spiel" bekommen, aber in meinem Modell ("Spiel") habe ich keine "getScore" -Methode, die mich zu einem: Eigenschaft 'Ergebnis' führt, das nicht auf Typ com gefunden wird .myapp.models.Game. wenn ich es in der JSP-Seite – Rony

+0

verwende, hatte ich einen Tippfehler in meinem Code, nur behoben. Da Sie bei einem Spiel Punkte erzielt haben, können Sie es von diesem Objekt erhalten. – ipolevoy

+0

ah ok! Ich habs! Funktioniert jetzt, ich habe die Include wie Sie gesagt :) Vielen Dank! – Rony

Verwandte Themen