를 사용하여 매핑되지 않은 클래스 NHibernate 을 처리해야 합니다.

StackOverflow https://stackoverflow.com/questions/660820

  •  20-08-2019
  •  | 
  •  

문제

내가 사용하는 사용자 정의 이름으로 쿼리 NHibernate 는 내가 원하는 컬렉션을 반환 사람의 개체입니다.이 사람은 매핑되지 않는 NHibernate 매핑을 의미하는 나 다음과 같은 예외:

시스템입니다.컬렉션이 있습니다.일반적입니다.KeyNotFoundException:지정된 키가 존재하지 않에 사전입니다.

그것은 버려질 때 세션을 가져옵 만들었기 때문에 그것을 찾을 수 없습니스 클래스 이름을 호출할 때 NHibernate.Cfg.매핑됩니다.GetClass(String 클래스).이것은 모두 상당히 이해할 수 있지만 내가 궁금하는 경우가 있었는 어떤 방법을 말 NHibernate 를 클래스를 사용하더라도 내가 없어 매핑하세요?

도움이 되었습니까?

해결책 5

이를 해결하기 위해 TupleTopropertyresultTransformer를 사용하고 속성 값 목록을 제공했습니다. 이에 대한 몇 가지 제한 사항이 있습니다. 주된 것은 SQL 쿼리가 TupleTopropertyresultTransformer 생성기에 속성을 제공하는 것과 동일한 순서로 결과를 반환해야한다는 것입니다.

또한 속성 유형이 추론되므로 TupleTopropertyresultTransformer를 사용하는 것 외에도 NHibernate 내의 객체를 명시 적으로 매핑하지 않고 SQL 쿼리를 사용하여 객체 모음을 반환 할 수있는 합리적으로 쉬운 방법을 제공하는 것 외에도 소수점 열에주의해야합니다. .

다른 팁

사용하지 않는 이유 :

query.SetResultTransformer(Transformers.AliasToBean(typeof(Person)));

열 별칭을 속성 이름으로 사용하여 쿼리의 각 열에서 개인 객체 속성에 데이터를 삽입합니다.

어떻게 할 수 있는 쿼리를 만들어 반환하는 형식의 인스턴스에 매핑되지 않은?

내가 생각하는 마이클는 점을 여기에서,어쩌면 당신은 좀 있어야 됩니다.(최소한,이것은 내가 무슨 생각을 찾고 계신).

쿼리를 만들에 매핑되는 형식,그리고,당신이 할 수있는'프로젝트'는 쿼리를'DTO'.이를 위해서는,당신은'가져'사람 클래스는 그것이 알려진 NHibernate,그리고 당신은 당신을 사용하 ResultTransformer.

무언가 이것을 좋아한다:

ICriteria crit = session.CreateCriteria (typeof(Person));

// set some filter criteria

crit.SetProjection (Projections.ProjectionList()
                     .Add (Property("Name"), "Name")
                     .Add (Property( ... )
                   );

crit.SetResultTransformer(Transformers.AliasToBean(typeof(PersonView));

return crit.List<PersonView>();

그러나,이것은 여전히 의미야 가져오기 이 클래스는 NHibernate 그것에 대해 알고있다.

클래스를 사용함으로써 Nhibernate는 기본적으로 사람에게 사용하려는 테이블과 필드 매핑을 포함하여 관련된 모든 것에 대해 추측 할 것입니다. nhibernate는 아마도 이름이나 무언가를 일치시키는 것을 기반으로 동적 바인딩을 수행하기 위해 해킹 될 수 있지만 전체 아이디어는 일반 기존 데이터 객체에서 XML 파일을 사용하여 데이터베이스 필드로 매핑을 만드는 것입니다.

클래스를 매핑하지 않는 것이 정말 좋은 이유가 없다면, 매핑을 추가하면 최상의 결과를 얻을 수 있습니다 ...

즉, 이름이 지정된 쿼리를 사용하여 결과를 비 채찍 클래스에 직접 주입 할 수 없습니다. 어떤 필드 또는 다른 말로, 매핑에 어떤 열을 넣을 열을 알려야합니다. ;) 그러나 이름이 지정된 쿼리에서 스칼라 값을 반환 할 수 있으며 해당 객체 배열을 가져 와서 수동으로 수집 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top