이전 Oracle 8i 프로덕션 데이터베이스에 연결하기 위해 .Net OracleClient와 함께 NHibernate 2.1.2.4000을 사용하는 프로젝트가 있습니다. 올바른 쿼리를 생성하는 ICriteria를 구현했지만 다음 내부 예외가 발생했습니다. System.Data.OracleClient.OracleException : ORA-12704 : 문자 집합 불일치가입니다.히비스 네이트. Projections.Constant에 IType을 설정하는 방법?
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>();
내 질문은 : 나는 (ITYPE, 객체) Projections.Constant의 인수에 ITYPE를 AnsiString를 선언 할 수 있습니까? 나는 이것이 문제를 해결할 수 있다고 생각합니다. Projections.Constant()를 제거하고 모든 것이 정상적으로 작동합니다.
샘플 생성 쿼리 : 사전에
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
감사합니다.
먼저 늦은 응답에 대해 사과드립니다. 나는 이것을 시도했지만 작동하지 않았다. 마침내 작동하는 까다로운 해결책은 숫자 상수 -999를 삽입하는 것이 었습니다. 그 다음 결과에서 원하는 숫자 (", código :")로 숫자의 모든 일치를 바꿉니다. – GCuevasR
세션을 반환하십시오. CreateCriteria(). SetProjection (Projections.SqlFunction ("concat", NHibernateUtil.String, Projections.Property ("Descripcion"), Projections.Constant (-999), Projections.Property ("Id")))). 추가 (Expression.InsensitiveLike ("Descripcion", filter.Trim(), MatchMode.Anywhere)). SetMaxResults (캔트). 목록 (); –
GCuevasR
또한 다음과 같이 타입을 설정해 보았습니다 : NHibernateUtil.GetSerializable (typeof (NHibernate.Type.AnsiStringType))) – GCuevasR