Bonjour,
Je reviens à la charge.
Je ne comprends pas mon pb, il doit être tout bête mais je tourne en rond
J'ai une classe
jusqu'a la tout va bien, je tente d'utiliser le SqlResultSetMapping
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
25
26
27
28
29 @Entity @Table(name = "ETIC_THEMES_USER") @XmlRootElement @SqlResultSetMapping( name = "findByIdThemeCountQuestions", entities = {@EntityResult(entityClass = EticThemesUser.class)}, columns = {@ColumnResult(name = "countQuestions")} ) public class EticThemesUser implements Serializable { .... @OneToMany(cascade = CascadeType.ALL, mappedBy = "idTheme") private Collection<EticQuestionsUser> eticQuestionsUserCollection; @Transient private Integer countQuestions; public EticThemesUser(BigDecimal idTheme) { this.idTheme = idTheme; } public Integer getCountQuestions() { this.countQuestions = this.getEticQuestionsUserCollection().size(); return countQuestions; } public void setCountQuestions(Integer countQuestions) { this.countQuestions = countQuestions; }
Avec un objet facade
Cependant dans mes logs c'est comme si le JPQL n'était pas transformé en SQL, car j'ai une requête avant qu'on voit concrètement se transformer ??
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 /** * Rapporter le nombre de questions en fonction des thèmes * * @return List<Object[]> * Object[0] ramène le thème Object[1] ramène le count */ @Override public List<Object[]> getThemeByCountQuestions() { String req = "SELECT e.idTheme, count(d.idTheme) as countQuestions FROM EticThemesUser e join e.eticQuestionsUserCollection d on e.idTheme=d.idTheme group by e.idTheme"; Query query = em.createNativeQuery(req, "findByIdThemeCountQuestions"); em. Session session = em.unwrap(JpaEntityManager.class).getActiveSession(); DatabaseQuery databaseQuery = ((EJBQueryImpl) query).getDatabaseQuery(); databaseQuery.prepareCall(session, new DatabaseRecord()); String sqlString = databaseQuery.getSQLString(); System.out.println("Requête + " + sqlString); return query.getResultList(); } }
j'ai essayé avec encore plus simple sans le compte et c'est comme si le JPQL était envoyé tel quel à la base ??
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 Précis: SELECT ID_THEME, ACTIF, DEGRE, LIBELLE_THEME, ORDRE, TOOLTIP FROM ETIC_THEMES WHERE (DEGRE = ?) bind => [1 parameter bound] Infos: taille : 7 Infos: EJB : 1 Infos: EJB : 2 Infos: EJB : 3 Infos: EJB : 4 Infos: EJB : 5 Infos: EJB : 6 Infos: EJB : 7 Infos: Requête + SELECT e.idTheme, count(d.idTheme) as countQuestions FROM EticThemesUser e join e.eticQuestionsUserCollection d on e.idTheme=d.idTheme group by e.idTheme Précis: SELECT e.idTheme, count(d.idTheme) as countQuestions FROM EticThemesUser e join e.eticQuestionsUserCollection d on e.idTheme=d.idTheme group by e.idTheme Avertissement: Local Exception Stack: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00942: Table ou vue inexistante Error Code: 942 Call: SELECT e.idTheme, count(d.idTheme) as countQuestions FROM EticThemesUser e join e.eticQuestionsUserCollection d on e.idTheme=d.idTheme group by e.idTheme
Olivier
Partager