Restrictions.sqlRestrictions + to_date Oracle + alias = Galere
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 :
Code:
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");
}
} |
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).
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 :
Code:
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(); |
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:
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 |
Du coup, je me pose la question de savoir si Hibernate est capable de traiter les alias "perso" dans un Restrictions.sqlRestriction ?
Avez-vous rencontrer le même problème et quels sont els axes de solution ?
Merci !