2010-01-19 5 views
3

NHibernate를 사용하여 ASP.NET MVC 애플리케이션에 객체를로드하고 있습니다. 이 같은 (하지만 사용자 이름) 사용자의,NHibernate - 게으른 로딩 프리미티브 타입

예를 들어, 제출는 사용자가 제출되고, 나는 사용자 이름을 표시하려면 :

<%= Html.Encode(item.User.UserName) %> 

내가 NHibernate에를 사용하여 제출을로드 할 때, 사용자는 데이터베이스에서 느슨하게로드됩니다. 즉, 위의 코드 행을 호출 할 때 (사용자 정보를로드하기위한) 실제 SQL 쿼리가 생성되고 실행된다는 것을 의미합니다.

문제는 SQL 쿼리가 사용자의 다른 정보 (예 : 암호, 이메일 등)도 선택한다는 것입니다.이 정보는 분명히 필요 없으며 폐기됩니다.

SQL 쿼리는 다음과 같습니다

SELECT id, username, password, email FROM User WHERE Id = 1; 

내가 결론을 내 데이터베이스의 테이블에 매핑되는 다른 개체에 NHibernate에 만 게으른 부하가 참조. 문자열, ints 등과 같은 기본적인 기본 유형을 게으른로드하지 않는 것 같습니다.

할 수 있습니까? 이게 가능

SELECT username FROM User WHERE Id = 1; 

: 위의 라인 코드를 선택하면,이 같은 SQL 쿼리 보이는 뭔가를 원하십니까? 방법?

답변

1

완전한 개체를로드하고 싶지 않은 이유가 있을까요? 드문 경우를 제외하고는 실제 성능 차이가 없습니다.

비밀번호를 메모리에로드하고 싶지는 않지만 비밀번호로 암호화해야하며 도메인 모델에 포함되어 있지 않아야합니다. 귀하의 경우 내가 할 것이 사용자 클래스를 두 개의 클래스로 User 및 UserProfile (비밀 번호 등 포함) 하위 클래스입니다, 그래서 당신은 오직 사용자 계정을 관리 할 때 UserProfile 개체와 함께 작동합니다.

0

당신은 당신이 그것을 저장할 객체에 쿼리 결과를 매핑 할의 ResultTransformer를 사용해야합니다 (그러나 마이너스 나는 일반 사용자 DTO 클래스 이해 다른 모든 분야)

확인이를 http://docs.jboss.org/hibernate/stable/core/reference/en/html/querysql.html (그것의 최대 절전 모드, NHibernate가 아니지만, 여전히 적용되어야한다) 특히 섹션 16.1.5

관련 문제