2011-11-05 1 views
1

je base de données mise en veille prolongée avec trois modèles:façon de sélectionner Easiest dans un modèle en utilisant JPQL

Article - which has is part of multiple categories (EDIT). 
Category - which contains articles, and is part of an App 
App - which has different categories 

Je veux sélectionner tous les articles qui ont une catégorie d'une application spécifique. Je suis en train de créer quelque chose comme:

find("ANY categories.app = ?", app).fetch(); 

Quelque chose comme cela m'a travaillé avec CoreData, mais il est évident pas avec JPA, et je ne semblent pas être en mesure de trouver comment faire cela.

Edit: Pour clarifier : articles:

@ManyToMany 
    public List<Category> categories; 

dans la catégorie:

@ManyToOne 
    public App app; 

    @ManyToMany(mappedBy = "categories") 
    public List<Article> articles; 

App:

@OneToMany(mappedBy = "app") 
    public List<Category> categories; 

Répondre

0
select a from Article a where a.category.app = ? 

Lire http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql

+0

Lorsque j'essaie, j'obtiens: java.lang.IllegalArgumentException: org.hibernate.QueryException: tentative illégale de déréférencer la collection [article0_.id.categories] avec la référence de propriété d'élément [app] [SELECT a from models.Article un où a.lastUpdate>? ET a.categories.app =?]. (catégories au lieu de catégorie, car il s'agit d'une relation plusieurs-à-plusieurs) –

+0

Ainsi, un article a de nombreuses catégories, n'est-ce pas? Vous avez dit qu'une catégorie contenait plusieurs articles. C'est donc une association ManyToMany. Dans ce cas, vous avez besoin d'une jointure explicite: sélectionnez a de l'article une jointure interne a.catégories c où c.app =?. Ceci est très bien expliqué dans la documentation à laquelle je suis lié. Lisez-le, c'est comme ça que vous apprendrez. –

+0

J'ai eu des frissons lorsque vous avez parlé de jointure interne, de mauvais souvenirs d'un passé passé ... Merci! Je ne m'en souvenais plus et je ne savais pas par où commencer. Parfois, je fais des choses de manière «ancienne fade» que j'ai utilisé pour coder SQL, ce qui est coûteux. Donc merci de souligner que c'est le bon chemin, ça marche! Le document est très utile! (et désolé de ne pas avoir précisé le cas) –

Questions connexes