Requête JPQL avec OÙ sur les champs imbriqués
J'ai un java de la classe d'entité UserBean avec une liste d'événements:
@OneToMany
private List<EventBean> events;
EventBean a Date variable:
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date eventDate;
Maintenant dans UserBean je veux créer un NamedQuery qui renvoie toutes les dates qui sont comprises dans une plage spécifique:
@NamedQuery(name="User.findEventsWithinDates",
query="SELECT u.events FROM UserBean u WHERE u.name = :name AND u.events.eventDate > :startDate AND u.events.eventDate < :endDate")
La requête ci-dessus ne compile pas. J'obtiens cette erreur:
The state field path 'u.events.eventDate' cannot be resolved to a valid type.
En passant, j'utilise EclipseLink la version 2.5.0.v20130507-3faac2b.
Que puis-je faire pour faire de cette requête? Merci.
OriginalL'auteur user473453 | 2013-09-09
Vous devez vous connecter pour publier un commentaire.
Chemin
u.events.eventDate
illégale est une construction en JPQL, car il n'est pas autorisé à naviguer via une collection appréciée expression de chemin. Dans ce casu.events
est une collection appréciée expression de chemin. En JPA 2.0 spécification de ce qui est dit avec des mots suivants:Ce problème peut être résolu par l'utilisation de JOINDRE:
Ajouté :nom de répondre. Une telle condition va à l'existant, OÙ la clause supplémentaire OÙ l'une des clauses avant de REJOINDRE déclaration ne sont pas possibles.
Yay, qu'il a fait. La finale de la requête: SELECT DISTINCT de l'u.les événements DE UserBean u JOINDRE u.les événements de e OÙ u.nom = :nom ET adresse.eventDate > :startDate ET de l'e.eventDate < :date de fin Merci beaucoup pour votre aide. Je suis assez nouveau pour JPA, est-ce le moyen le plus efficace pour récupérer les données dont j'ai besoin à partir de la base de données? La requête semble être lent à s'exécuter, mais mon parfois la lenteur de la connexion internet pourrait être la raison pour cela.
Pourquoi est distinct nécessaire ici?
OriginalL'auteur Mikko Maunu