Bonjour,

je veux ajouter une clause "sql pur" a un DetachedCriteria.

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
30
31
32
33
34
35
36
37
38
39
40
41
 
			// partie criterions hibernate simples
			c = c.add(Restrictions.ge("capacite", criteresAppareil.getPontCapacite()));
			...
			// partie criterion sql
		if ((criteresAppareil.getEtatReparation() != null) || (criteresAppareil.getDateControleDebut() != null) || (criteresAppareil.getDateControleFin() != null))
		{
			List<Object> values = new ArrayList<Object>();
			List<Type> types = new ArrayList<Type>();
			String sql = 
				"(" +
				"	select count(*) from CMT_T_CTRLAPPAREIL c " +
				"	where c.CTL_C_ID = " + 
				"	( " +
				"		select l.CTL_C_ID " + 
				"		from (select * from CMT_T_CTRLAPPAREIL ORDER BY CTL_D_DATE DESC) l " +
				"		where 1=1 " +
				"		  and l.CTA_APR_C_ID = {id} " + 
				"		  and ROWNUM = 1 " + 
				"	) ";
				if (criteresAppareil.getDateControleDebut() != null)
				{
					sql += "	  and c.CTL_D_DATE >= ? ";
					values.add(criteresAppareil.getDateControleDebut());
					types.add(Hibernate.DATE);
				}
				if (criteresAppareil.getDateControleFin() != null)
				{
					sql += "	  and c.CTL_D_DATE <= ? ";
					values.add(criteresAppareil.getDateControleFin());
					types.add(Hibernate.DATE);
				}
				if (criteresAppareil.getEtatReparation() != null)
				{
					sql += "	  and (select e.libelle_courte from CMT_T_REPARATION r, CMT_T_COD_ETATREPARATION e where r.REP_CER_C_ID = e.COD_C_ID and r.REP_C_ID = c.CTL_REP_C_ID) = ? ";
					values.add(criteresAppareil.getEtatReparation().toString());
					types.add(Hibernate.STRING);
				}
				sql += ") > 0";
			c = c.add(Expression.sqlRestriction(sql, values.toArray(), types.toArray(new Type[types.size()])));
		}
quand je fais le findByCriteria , ca plante en disant "Token SQL92 non pris en charge à l'emplacement: 3199: id"
{id} est censé mapper une colonne de la table sur laquelle est basé le DetachedCriteria.

une idée ?
j'ai aussi essayé {ControleAppareil.id} sans succes
ca marche avec this_.APR_C_ID ... mais utiliser le this_ ne me plait pas trop

autre question, avec ce code je suis super dependant de ma base (ORACLE) mais je ne sais pas comment traduire ma requete en "hibernate"
Je suis interressé par ca aussi si qqu'un est assez calé pour me donner des pistes ou au moins me dire si c'est possible.

merci
Sylvain