IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

[ORMLite-débutant] Relation many-to-many, queryBuilder qui ne trouve pas les bons résultats


Sujet :

Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 44
    Points : 41
    Points
    41
    Par défaut [ORMLite-débutant] Relation many-to-many, queryBuilder qui ne trouve pas les bons résultats
    Bonjour les gens

    j'ai comme un léger soucis avec ORMLite et j'espère trouver un peu d'aide.
    Dans mon modèle de données j'ai deux entités Utilisateur et Question liées entre elles par une relation many to many nommée Score.

    Leur implémentation est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @DatabaseTable(tableName = "Utilisateur", daoClass = UtilisateurDao.class)
    public class Utilisateur {
        @DatabaseField(generatedId = true)
        private int id;
        @DatabaseField(columnName=UtilisateurDao.COL_LOGIN)
        private String login;
        @ForeignCollectionField(eager=false)
        private ForeignCollection<Score> scores;
    (...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @DatabaseTable(tableName = "Question", daoClass = QuestionDao.class)
    public class Question {
        @DatabaseField(generatedId = true)
        private int id;
        @DatabaseField(canBeNull = false)
        private String texte;
        @DatabaseField(canBeNull = false, foreign = true)
        private Sujet sujet;
        @ForeignCollectionField(columnName = QuestionDao.COL_REPONSE, eager = false)
        private ForeignCollection<Reponse> reponses;
        @ForeignCollectionField(eager = false)
        private ForeignCollection<Score> scores;
    (...)
    et pour la many to many
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @DatabaseTable(tableName = "Score", daoClass = ScoreDao.class)
    public class Score {
        @DatabaseField(generatedId=true)
        private int id;
        @DatabaseField(foreign=true, columnName=ScoreDao.COL_USER)
        private Utilisateur user;
        @DatabaseField(foreign=true, columnName=ScoreDao.COL_QUESTION)
        private Question question;
        @DatabaseField
        private int niveauMaitrise;
    (...)
    Mon problème est le suivant: je cherche à retrouver un score tel que score.utilisateur== un utilisateur donné et score.question== une question donnée. Pour ce faire j'utilise la méthode suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Score findByUserAndQuestion(Utilisateur user, Question question)
                throws SQLException {
            QueryBuilder<Score, Integer> qBuilder = queryBuilder();
            qBuilder.where().eq(COL_QUESTION, question);
            qBuilder.where().eq(COL_USER, user);
            List<Score> result = qBuilder.query();
            if (result.size() > 0) {
                return result.get(0);
            }
            return null;
        }
    j'ignore pourquoi, mais, quand j'utilise cette méthode, je trouve un résultat qui n'est pas le bon. Ainsi, si je cherche un score avec une question telle que question.id==10, je trouve un score avec une question.id==11 je fais donc appel au publique, quelqu'un aurait-il une vague idée de la bêtise que j'ai pu faire pour que ça parte ainsi en sucettes?
    D'avance merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 44
    Points : 41
    Points
    41
    Par défaut
    Je suis un boulet et je manque manifestement de sommeil: la solution est simple.
    Si quelqu'un rencontre un jour ce soucis, il est juste important de se rappeler que le AND n'est pas du tout implicite dans le where. Ce n'est donc pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Score findByUserAndQuestion(Utilisateur user, Question question)
                throws SQLException {
            QueryBuilder<Score, Integer> qBuilder = queryBuilder();
            qBuilder.where().eq(COL_QUESTION, question);
            qBuilder.where().eq(COL_USER, user);
            List<Score> result = qBuilder.query();
            if (result.size() > 0) {
                return result.get(0);
            }
            return null;
        }
    qu'il fallait que j'écrive mais bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public Score findByUserAndQuestion(Utilisateur user, Question question)
    			throws SQLException {
    		QueryBuilder<Score, Integer> qBuilder = queryBuilder();
    		qBuilder.where().eq(COL_QUESTION, question).and().eq(COL_USER, user);
    		List<Score> result = qBuilder.query();
    		if (result.size() > 0) {
    			return result.get(0);
    		}
    		return null;
    	}
    Notez bien le .and() entre les deux .eq que le boulet que je suis avait omis.
    Sur ces bonnes paroles, je vous souhaite bien le bonjour et passe le post en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/04/2010, 10h42
  2. Algorithme de Prim qui n'entraîne pas le bon résultat
    Par Invité dans le forum Général Java
    Réponses: 2
    Dernier message: 31/03/2009, 17h05
  3. requete qui n'affiche pas le bon résultat
    Par imsse dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 26/02/2008, 17h46
  4. Réponses: 2
    Dernier message: 16/10/2007, 14h40
  5. [RegEx] ereg qui ne trouve pas les accents
    Par Sephiroth Lune dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2007, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo