Bonjour,

dans une base oracle, j'ai un champ exercice où on stocke des années
sous la forme de "Number(4)".
J'utilise Hibernate et je souhaite pouvoir effectuer une recherche en
disant "renvoie moi toutes les dates qui commencent par : 20 par
exemple", en gros un sorte de 'like' mais pour du numérique.

Pour cela j'ai crée la classe suivante :

/**
* Classe permettant d'effectuer l'équivalent d'un 'like' sur
* une propriété numérique (Number ou Integer)
*/
public class LikeIntegerExpression implements Criterion
{
private String propertyName;
private Integer value;

public LikeIntegerExpression(String propertyName, Integer value) {
this.propertyName = propertyName;
this.value = value;
}

public String toSqlString(Criteria criteria, CriteriaQuery
criteriaQuery) throws HibernateException {

String[] columns = criteriaQuery.getColumnsUsingProjection(criteria,
propertyName);
Type type = criteriaQuery.getTypeUsingProjection(criteria,
propertyName);
StringBuffer fragment = new StringBuffer();

if (columns.length > 1) {
fragment.append('(');
}

SessionFactoryImplementor factory = criteriaQuery.getFactory();
int[] sqlTypes = type.sqlTypes( factory );

for ( int i=0; i<columns.length; i++ ) {
fragment.append("to_char(" + columns[i] + ") like '" +
value.intValue() + "%'");

if ( i < columns.length-1 ) {
fragment.append(" and ");
}
}

if (columns.length>1) {
fragment.append(')');
}

return fragment.toString();
}

public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery
criteriaQuery) throws HibernateException {
//Object icvalue = value;
return new TypedValue[] { criteriaQuery.getTypedValue(criteria,
propertyName, value) };
}

}

Hibernate effectue bien la requete, mais il plante juste après en
disant : «
[ERROR JDBCExceptionReporter] Index de colonne non valide

[11:33:45.588]
org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:72)
Exception : Une erreur non typée a été levé : could not execute
query »

Si j'effectue la requête générée par Hibernate sous Toad, la requête
s'exécute bien...

Je pense que mon erreur vient de l'implémentation de la méthode : «
public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery
criteriaQuery) » car je n'ai pas très bien compris ce que doit faire
cette méthode ? Qu'en pensez-vous ?

HELP ME !!!
Merci d'avance.

Fabien