Bonjour,
Souhaitant faire une simple requête utilisant la fonction to_date de Oracle dans un criteria, je dois m'avouer un peu perdu avec l'alias Hibernate !
Dans le manuel de référence hibernate, les exemples utilisant des "Restrictions.sqlRestriction" s'effectue sur une simple classe. Or, dans mon cas, la hiérarchie de classe est un plus complexe. Considérons le cas suivant :
Dans cet exemple, un Camion (table Camion) possède plusieurs PneuCamion (table PneuxCamion). Pour chacun des PneuCamion, un attribut renseigne sur la date à laquelle le pneu a été changé (dateMontage).
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 public class Camion { private String nomChauffeur; ... private Set<PneuCamion> pneuxCamion; ... } public class PneuCamion { ... // Table BDD : Pneux_Camion // Champ BDD : Date_Montage private DateTime dateMontage; public String getDateMontageAsString() { return dateMontage.toString("dd/MM/yyyy"); } }
Ainsi, je souhaiterai récupérer l'ensemble des objets Camion pour lesquels les pneux ont été changé avant le 12 décembre 2005. Travaillant sur une base Oracle, j'effectue le critère suivant sachant que la table Pneux_Camion contient le champ Date_Montage :
En réalisant ce critère, je constate que Hibernate n'arrive pas à créer la relation entre mon alias et j'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ... Criteria criteria = session.createCriteria(Camion.class); criteria.createAlias("pneuxCamion", "pneux"); criteria.add(Restrictions.sqlRestriction("to_date({pneux}.Date_Montage, 'dd/mm/rrrr')< to_date('12/12/2005','dd/mm/rrrr')")); List camions = criteriaTest2.list();
Du coup, je me pose la question de savoir si Hibernate est capable de traiter les alias "perso" dans un Restrictions.sqlRestriction ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Hibernate: select this_.ID_CAMION as ID1_26_1_, this_.NOM_CHAUFFEUR as NOM9_26_1_, this_.MIS_NO_CONTRAT as MIS10_26_1_, this_.MIS_TYPE_CONTRAT as MIS11_26_1_, this_.MIS_SALARIEDE as MIS13_26_1_, pneux1_.ID_CAMION as ID1_24_0_, pneux1_.DATE_MONTAGE as DATE24_0_ from DAT_FSURETE this_ inner join PNEUX_CAMION pneux1_ on this_.ID_CAMION=pneux1_.ID_CAMION where to_date(pneux.DATE_MONTAGE, 'dd/mm/rrrr')< to_date('12/12/2005','dd/mm/rrrr') 11:09:58 WARN JDBCExceptionReporter: SQL Error: 904, SQLState: 42000 11:09:58 ERROR JDBCExceptionReporter: ORA-00904: "PNEUX"."DATEMONTAGE" : identificateur non valide
Avez-vous rencontrer le même problème et quels sont els axes de solution ?
Merci !
Partager