J'ai un projet utilisant NHibernate 2.1.2.4000 avec .Net OracleClient, pour me connecter à une ancienne base de données de production Oracle 8i. J'ai implémenté un ICriteria, qui génère la requête correcte, mais l'exception interne suivante est déclenchée: System.Data.OracleClient.OracleException: ORA-12704: incompatibilité de jeu de caractères.NHibénate. Comment définir IType dans Projections.Constant?
return Session.
CreateCriteria<Carrera>().
SetProjection(Projections.SqlFunction("concat", NHibernateUtil.AnsiString, Projections.Property("Descripcion"), Projections.Constant(s), Projections.Property("Id"))).
Add(Expression.InsensitiveLike("Descripcion", filter.Trim(), MatchMode.Anywhere)).
SetMaxResults(cant).
List<String>();
Ma question est: Comment puis-je déclarer la ITYPE AnsiString dans les arguments de Projections.Constant (objet, ITYPE)? Je pense que cela pourrait éventuellement résoudre le problème. J'ai testé enlever Projections.Constant(), et tout fonctionne très bien.
requête générée Exemple:
select
*
from
(SELECT
(this_.CARR_DESCRIPCION||:p0||this_.CARR_CODIGO) as y0_
FROM
CARRERAS this_
WHERE
lower(this_.CARR_DESCRIPCION) like :p1)
where
rownum <=:p2;
:p0 = ', código: ', :p1 = '%2451%', :p2 = 20
Merci à l'avance.
D'abord, désolé pour la réponse tardive. J'ai essayé mais ça n'a pas marché. La solution difficile qui a finalement été d'insérer une constante numérique -999), puis dans les résultats remplacer chaque correspondance du nombre avec la chaîne désirée (", código:"). – GCuevasR
Renvoyer la session. CreateCriteria(). SetProjection (Projections.SqlFunction ("concat", NHibernateUtil.String, Projections.Property ("Descripcion"), Projections.Constant (-999), Projections.Property ("Id"))). Add (Expression.InsensitiveLike ("Descripcion", filter.Trim(), MatchMode.Anywhere)). SetMaxResults (dévers). Liste (); –
GCuevasR
J'ai également essayé de définir le type avec ceci: NHibernateUtil.GetSerializable (typeof (NHibernate.Type.AnsiStringType)) – GCuevasR