J'utilise QueryDSL avec JPA.QueryDSL: interrogation des relations et propriétés
Je veux interroger certaines propriétés d'une entité, il est comme ça:
QPost post = QPost.post;
JPAQuery q = new JPAQuery(em);
List<Object[]> rows = q.from(post).where(...).list(post.id, post.name);
Il fonctionne très bien.
Si je veux interroger une propriété de relation, par ex. commentaires d'un article:
List<Set<Comment>> rows = q.from(post).where(...).list(post.comments);
C'est aussi bien.
Mais quand je veux interroger la relation et les propriétés simples ensemble, par ex. Puis, quelque chose s'est mal passé, générant une mauvaise syntaxe SQL.
Puis j'ai réalisé qu'il n'est pas possible de les interroger ensemble dans une instruction SQL.
Est-il possible que QueryDSL traiterait en quelque sorte les relations et générer des requêtes supplémentaires (tout comme ce que fait avec mise en veille prolongée relations paresseux), et charger les résultats en?
Ou devrais-je simplement demander deux fois, puis fusionner les deux listes de résultats?
P.S. ce que je veux réellement, c'est chaque message avec les ids de ses commentaires. Donc, une fonction pour concaténer les identifiants des commentaires de chaque publication est meilleure, est-ce que ce genre d'expression est possible?
q.list(post.id, post.name, post.comments.all().id.join())
et générer un sql comme sous-requête (select group_concat(c.id) from comments as c inner join post where c.id = post.id)
Merci pour la réponse. Je ne comprends pas bien ... dans la méthode SQL, vouliez-vous dire que je peux appeler la sous-requête dans SQL QueryDSL? dans ce dernier cas, vouliez-vous dire que je devrais avoir une propriété distincte de la liste commentIds (avec une formule dessus)? –
Vous pouvez utiliser des sous-requêtes avec QueryDSl SQL, oui. Et concernant votre deuxième question, non, juste la propriété normale, mais paresseusement récupérée, avec des propriétés annotées, vous pouvez accéder à la propriété id, mais sans aller chercher l'objet entier. –
Merci! Je ne connaissais pas l'effet d'annotation de l'accesseur avant. Je vais regarder dans cela :) –