Bonjour,
dans le cadre d'un développement Web sous Netbeans :
EJB3 / JSF / Facelets / Glassfish / mysql,
je rencontre le problème suivant lors de l'utilisation d'une méthode de récupération de données. Le résultat devrait être une collection de type List.
Requête SQL validée par phpmyadmin :
Extrait du code source de mon session bean avec convertion en EJBQL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10SELECT o.id, o.url FROM t_bookmarks AS o INNER JOIN t_joinusersbookmarks AS jub ON o.ID = jub.bookmark_id INNER JOIN t_users AS usr ON jub.user_id = 2 GROUP BY o.id, o.url
Entity class Bookmarks :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public List<Bookmarks> findByUserId(long usrid) { List<Bookmarks> usr = null; String querystring; querystring = "SELECT object(o) "; querystring += "FROM Bookmarks AS o "; querystring += "INNER JOIN JoinUsersBookmarks AS jub "; querystring += "ON o.ID = jub.bookmark_id "; querystring += "INNER JOIN Users AS usr "; querystring += "ON jub.user_id = " + usrid + " "; querystring += "GROUP BY o "; try { usr = (List<Bookmarks>) em.createQuery(querystring).getResultList(); } catch (javax.persistence.NoResultException en) { return usr = null; } return usr; }
Entity class Users :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 @Entity @Table(name="t_bookmarks") public class Bookmarks implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; // Primary key @Column(name = "url", unique = true, updatable = false, nullable = false, length = 512) private String url; (...) }
Entity class JoinUsersBookmarks :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Entity @Table(name="t_users") public class Users implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; // Primary key @Column(name = "login", unique = true, updatable = false, nullable = false, length = 64) private String login; (...) }
Le message d'erreur est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 @Entity @Table(name="t_joinusersbookmarks") public class JoinUsersBookmarks implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; // Primary key @Column(name = "user_id") private long user_id; // Foreign key @Column(name = "bookmark_id") private long bookmark_id; // Foreign key (...) }
Ce message apparait dans la page Web du navigateur lors de la demande d'affichage de la liste des bookmarks en fonction d'un utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 HTTP Status 500 - root cause Exception [TOPLINK-8024] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.EJBQLException Exception Description: Syntax error parsing the query [SELECT object(o) FROM Bookmarks as o INNER JOIN JoinUsersBookmarks as jub ON o.ID = jub.bookmark_id INNER JOIN Users as usr ON jub.user_id = 0 GROUP BY o ], line 1, column 68: syntax error at [as]. Internal Exception: line 1:68: expecting DOT, found 'as' root cause line 1:68: expecting DOT, found 'as'
Merci d'avance pour vos réponses.![]()







Répondre avec citation
Partager