2011-02-08 2 views
1


나는이 같은 쿼리를 구성하고있어 다음 DB-프로파일에서NHibernate에 쿼리에 대한 매개 변수로 긴 문자열을 설정

private void Test() 
{ 
    ISession session = sessionFactory.OpenSession(); 
    var query = session.GetNamedQuery("testQuery"); 
    string s = BuildVeryLongString(); // length more that 4000 chracters 
    query.SetParameter("Param", s, NHibernateUtil.String); 
    query 
     .SetResultTransformer(new AliasToBeanResultTransformer(type)) 
     .List<Type>(); 
} 

을 나는 것만으로는 충분하지 않습니다 그 Param의 유형 nvarchar(4000) 것을 볼 수 있습니다 . 더 긴 문자열을 사용한다는 NHibernate를 말할 수있는 방법이 있습니까?
P. DB는 MSSQL 2005입니다.
미리 감사드립니다!

답변

2

매핑 된 속성에 대한 제약 조건으로 Param이 사용된다고 가정하면 쿼리는 매핑 된 속성에 따라 매개 변수에 올바른 데이터 형식과 길이를 사용하려고합니다. Param은 nvarchar (max) 열에 매핑 된 속성과 상관이 있습니까? 그렇다면 데이터 길이를 올바르게 설정 했습니까? Nhibernate가 nvarchar (max)로 인식하게하려면 문자열 열의 데이터 길이를 4000 (4001이 작동해야 함) 이상으로 설정해야합니다.

+0

이제 NHibernateUtil.StringClob을 사용하고 있으며 저에게 적합합니다. – StuffHappens

+0

NHibernate 일 StringClob == 데이터 형식으로 SQL Server의'text'. 나는 대부분의 경우에 잘 작동 할 것이고 분명히 여러분의 컬럼의 데이터 타입이 실제로'text'라면 분명 완벽 할 것입니다. 그러나 nvarchar (max) 또는 varchar (max)를 사용하는 경우 앞서 언급 한대로 "StringClob"을 제거하고 매핑의 길이를 설정하는 것이 좋습니다. 그렇게하면 모든 것이 정확하게 매핑된다는 것을 알 수 있으며 Schema Exporter를 사용할 수 있습니다. – HackedByChinese

관련 문제