Recherche pendant quelques heures, mais je suis coincé dans ma courbe d'apprentissage pour PlayFramework avec JPA. Je suis en train de créer un exemple de site Web sur lequel des articles peuvent être publiés. Mais ces messages peuvent avoir les états:
Ces états sont stockés dans une table séparée. De toute évidence, le projet de publication de l'état ne devrait pas encore être visible.
J'ai donc ces classes:
Dans ma classe de page, j'ai:
@Column(name="POSTS_REF")
@Where(clause="PostPublished")
private List<Posts> userPosts;
Mais ça ne fonctionne pas! Alors, comment puis-je spécifier une clause where, pour ne charger que les articles qui sont à l'état publié sans utiliser JPQL ??
Merci!
MISE À JOUR: 2011-10-11
Tableau: Messages avec colonnes: - id - title - state_ref (référence à la table ID of States) - contenu
Tableau: Etats avec colonnes: - id - nom de l'état
Alors je veux dire quelque chose comme:
select *
from posts inner join states on posts.state_ref = states.id
where states.statename = 'PostPublished'
MISE À JOUR 13/10/2011
C'est ma modification actuelle, dans ma classe de page: mais cela ne fonctionne pas non plus.
/** link to the states */
@JoinColumn(name = "STATES_REF")
@OneToOne
@Where(clause = "states.statename = 'PostPublished'")
public MyState state;
PDATE 2012-02-1 La réponse d'Emt a fonctionné pour moi après tout.
Essayez quelque chose comme:
@Column(name="POSTS_REF")
@Where(clause="state='PostPublished'")
private List<Posts> userPosts;
ou
@Column(name="POSTS_REF")
@Where(clause="PostPublished=true")
private List<Posts> userPosts;
selon le type de champ d'état de votre entité Post
.
La clause where doit être une condition complète - quelque chose comme ça. En supposant que cet état est une propriété sur le poste.
@Column(name="POSTS_REF")
@Where(clause="state = 'PostPublished'")
private List<Posts> userPosts;
MODIFIER
Basé sur le modèle de données - ce qui suit devrait fonctionner. Je ne recommanderais pas de l'utiliser. Ne mappez pas la collection de publications - ayez simplement une référence à Page de la classe POsts, ajoutez une méthode à votre DAO pour récupérer les publications publiées pour une page en utilisant HQL ou une requête de critères.
@Column(name="POSTS_REF")
@Where(clause="exists (select id from states where state_ref = states.id and states.statename = 'PostPublished')")
private List<Posts> userPosts;
La condition where
doit contenir un nom de colonne de base de données:
@Where(clause="state = 'PostPublished'")
Ici, le nom de la colonne state
se trouve dans DB et non dans le mappage Hibernate.