2009-04-09 3 views
1

에서 상수를 반환 내가 위처럼 뭔가를 시도하고 자 NHibernate는 : HQL

SELECT new NDI.SomeQueryItem(user, account, " + someNumber + ") 
FROM NDI.SomeObject object 

NHibernate에

에 HQL 질의에서 상수를 반환해야합니다.

SELECT new NDI.SomeQueryItem(user, account, :someNumber) 
FROM NDI.SomeObject object 

을 그리고 나중에 : 나는 이것을 시도했습니다

.SetParameter("someNumber", 1).List<SomeQueryItem>(); 

을하지만 첫 번째 경우에 나는 '정의되지 않은 별칭 또는 알 수없는 매핑 1'을 얻을. 아마도 1이 별칭이라고 생각하기 때문에 어떤 의미가 있습니다.

두 번째로 '정의되지 않은 별칭 또는 알 수없는 매핑 : someNumber'가 나타나 매개 변수를 설정하지 않으면 다시 한 번 의미가 있습니다.

나는 이것을 할 방법이 있다고 생각합니다.

답변

2

HQL을 사용하면이 작업을 수행 할 수있는 방법이 있다는 것을 계속 믿으십시오.

어쨌든 왜 그러고 싶습니까? 이 속성의 값을 지정한 값으로 업데이트하려면 개체를로드 한 후이 속성을 업데이트하십시오. 또는 결과 집합이 객체와 일치하지 않는 경우 SQL 쿼리를 사용할 수 있습니다 (여전히 NHibernate 세션을 통해 수행 할 수 있음). 하지만 NHibernate의 목적은 데이터베이스에있는 것을 객체에 매핑하는 것이므로 수동 override를 지정하는 것은 허용되지 않는다.

+0

"NHibernate는 데이터베이스에있는 것을 오브젝트에 맵핑합니다."공정한 점은 데이터베이스 외부의 값을 기준으로 한이 값이며 항목의 생성자는 값을 기반으로하는 논리를가집니다. 그것은 질의를 사용하는 릴레이 정보와 거의 같습니다. 나는이 문제에 대해 옳고 그름을 논하지 않을 것이다 ... –

+0

이 항목은 NHibernate 객체 인 경우 이와 같은 생성자 논리를 가질 여유가 없다. 이는 NHibernate가 작동하도록 설계된 POCO 일종의 중지이다. –

+0

나는 이것에 관해 당신이 자리하고 있다는 것이 싫다. 나는이 질문이 지적 자살로 표시 될 수 있다고 생각한다. ... 공개적이고 잔인하다. –

1

도메인 개체와 데이터베이스 모델간에 (작은?) 연결이 끊어지는 것처럼 들립니다. 이 격차를 줄이기 위해 작은 "DTO"객체를 만드는 것은 어떻습니까?

질의를 통해 이름 지정으로 인해 도메인의 진정한 부분이 아닌 것으로 알고있는 SomeQueryItemDTO (또는 원하는 이름) 목록을 반환하십시오. 그런 다음 데이터베이스에 관계없는 데이터를 통합하여 목록을 처리하고 실제 SomeQueryItem 개체 목록을 작성하는 기능을 갖습니다.

이미 저장소 패턴을 사용하고 있다면 모든 추한 세부 정보가 저장소 내부에 숨겨져 있기 때문에 더 쉽게 수행 할 수 있습니다.