nhibernate : 기준을 사용하여 값 목록에서 쿼리 필터링
-
20-08-2019 - |
문제
기준 API를 사용하여 값 목록으로 필터링하려고합니다. 나는 이것이 불가능하다고 생각한다. 나는 단지 여기서 확신하도록 요구한다.
class Entity
{
int id { get; set; }
IList<Guid> Guids { get; set; }
}
매핑 :
<class name="Entity">
<id ...></id>
<bag name="Guids" table="Entity_Guids">
<key column="Entity_FK"/>
<element column="Guid"/>
</bag>
</class>
안내 목록이 있다고 가정합니다 (실제로는 또 다른 하위 퀘스트입니다). 적어도 하나의 안내서가 안내 목록에있는 모든 엔티티를 필터링하고 싶습니다.
SQL은 다음과 같습니다.
SELECT *
FROM Entity e
inner join Entity_Guids eg
on e.id = eg.Entity_FK
WHERE
eg.Guid in (subquery)
기준 API를 사용하면 불가능한 것 같습니다.
ICriteria query = session
.CreateCriteria(typeof(Entity), "e")
.Add(Subqueries.In("e.Guids", subquery))
예외를 던집니다.
해결책
e.guids 속성이 하위 퀘스트에 전달 된 E.Guids 속성은 단일 값이 아니기 때문에 쿼리가 작동하지 않습니다. 이런 식으로 그렇게하려면 실제로 교차로를 수행하고 교차로가 비어 있지 않은지 확인하려고합니다. 불행히도 LINQ 로이 작업을 수행 할 수는 있지만 불행히도 API에 존재하지 않습니다.
귀하의 안내서가 적절한 속성을 가진 엔티티 (값 속성에는 실제 GUID가 포함되어 있음)이고 양방향 관계가있는 경우에도 여전히이 작업을 수행 할 수 있습니다.
var subquery2 = DetachedCriteria.For<GuidEntity>()
.Add(Subqueries.In("Value", subquery))
.SetProjection("Entity_FK");
ICriteria query = session.CreateCriteria(typeof (Entity))
.Add(Subqueries.In("Id", subquery2));
제휴하지 않습니다 StackOverflow