예, 프로젝션 쿼리에서 엔티티를 반환 할 수 있습니다. 당신은 HQL 쿼리를 사용하는 경우
을 선택할 절을 HQL에서 주어진 클래스의 생성자를 지정할 수 있습니다
IList<Foo> foos = session.CreateQuery(
"select new Foo(f.Name, f.Value) from Foo f")
.List<Foo>();
이 예는 푸 클래스에서 사용하는 서명을 맞는 생성자가 있어야합니다 HQL 쿼리. 예 :
AliasToBean ResultTransformer를 사용하면 쿼리에서 반환 된 값을 지정된 유형의 속성에 자동 매핑 할 수 있습니다. 이 방식을 사용하려면 쿼리에 사용 된 별칭이 지정된 유형의 속성에 직접 매핑되어야합니다. 예를 들어 :
IList<Foo> foos = session.CreateQuery(
"select f.Name as Name, f.Value as Value from Foo f")
.SetResultTransformer(Transformers.AliasToBean<Foo>())
.List<Foo>();
는 푸 클래스는 다음과 같이 수, 이러한 예 작동하게하려면
는
public class Foo
{
public Foo() { }
public Foo(string name, double value)
{
Name = name;
Value = value;
}
public virtual string Name { get; set; }
public virtual double Value { get; set; }
}
클래스는 위의 첫 번째 HQL 예에 유효한 생성자가 포함되어 있습니다. 또한 두 번째 HQL 쿼리에 사용 된 별칭과 일치하는 공용 속성을 정의하므로 AliasToBean 변환기가 쿼리 결과에서 Foo 유형의 엔터티를 채울 수 있습니다.
그러나 예를 들어, 같은 투영 쿼리에서 두 가지 유형의 엔터티를 반환하려는 것처럼 보입니다. 이러한 방법을 사용하면 달성하기가 더 어려울 수 있습니다. 나는 행운이없이 몇 가지 빠른 테스트를했다.
업데이트 :
당신은 기준 API를뿐만 아니라 HQL로 AliasToBean 결과 변압기를 사용할 수 있습니다. 변환기는 같은 방식으로 사용되지만 투영 쿼리는 기준을 사용하여 조금 다르게 보입니다. 다음은 조건 쿼리를 사용하는 예입니다.
IList<Foo> foos = session.CreateCriteria<Foo>()
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("Name"), "Name")
.Add(Projections.Property("Value"), "Value"))
.SetResultTransformer(Transformers.AliasToBean<Foo>())
.List<Foo>();
감사합니다! 이상적으로 나는 HQL보다 criteria API를 사용하고 싶습니다. 임시 해결책으로 엔티티 A의 쿼리를 사용하고 열심히 엔티티 B를로드하고 있습니다. – Starfield
기꺼이 도와 드리겠습니다! AliasToBean 트랜스 포머는 Criteria API와 함께 작동합니다. 예를 들어 대답을 업데이트했습니다. –