2012-11-08 1 views
2

이전 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 

감사합니다.

답변

1

Projections.Constant(s, NHibernateUtil.AnsiString) 어쩌면?

+0

먼저 늦은 응답에 대해 사과드립니다. 나는 이것을 시도했지만 작동하지 않았다. 마침내 작동하는 까다로운 해결책은 숫자 상수 -999를 삽입하는 것이 었습니다. 그 다음 결과에서 원하는 숫자 (", código :")로 숫자의 모든 일치를 바꿉니다. – GCuevasR

+0

세션을 반환하십시오. 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

+0

또한 다음과 같이 타입을 설정해 보았습니다 : NHibernateUtil.GetSerializable (typeof (NHibernate.Type.AnsiStringType))) – GCuevasR

관련 문제