所以這在我看來似乎有些複雜,所以我會嘗試儘可能清楚地設置場景。在單個查詢中查詢基類和派生類
[ActiveRecord, JoinedBase]
abstract BaseClass
{
public x;
public y;
}
[ActiveRecord, JoinedBase]
ClassA : BaseClass { }
[ActiveRecord, JoinedBase]
ClassB : BaseClass { }
abstract GraphicBaseClass : BaseClass
{
public height;
public width;
}
[ActiveRecord, JoinedBase]
ClassC : GraphicBaseClass { }
[ActiveRecord, JoinedBase]
ClassD : GraphicBaseClass { }
[ActiveRecord, JoinedBase]
ClassE : GraphicBaseClass { }
注:幾個關鍵字和其他絨毛忽略保存的文本,我需要進入的牆。
因此,我們有一個標準的基類「BaseClass」,它實現了一些屬性的文本解釋。然後,我們有幾個類「ClassA」和「ClassB」,它們是基類的特定類型。然後,我們使用一箇中間基類「GraphicBaseClass」,它添加了其餘3個類繼承的高度和寬度屬性。這將導致單個BaseClass公用表以及每個具體類的5個特定表。
我有一個查詢,在大多數作品的基本屬性。在某些情況下,我想查詢高度和寬度。由於GraphicBaseClass不是一個activerecord類,我不能用它作爲查詢的基礎。目前我正在使用QueryOver語法,但我找不到使用高度和寬度屬性查詢三個GraphicBaseClass派生實體的方法。
我到目前爲止最接近的是:
QueryOver<BaseClass, BaseClass> query = QueryOver.Of<BaseClass>()
.Where(bc => bc.x == something)
.TransformUsing(CriteriaSpecification.DistinctRootEntity);
if (actualTypes.All(x => x.IsSubclassOf(typeof (GraphicBaseClass))))
{
// Filter by dimensions
if (criteria.RestrictSize)
{
if (criteria.FilterByDimension)
{
query.DetachedCriteria.Add(Restrictions.Lt("Width", criteria.Width + 10));
query.DetachedCriteria.Add(Restrictions.Lt("Height", criteria.Height + 10));
}
}
}
這導致SQL是這樣的:
SELECT TOP (4 /* @p0 */) this_.BaseClassId as BaseClass1_97_5_,
this_.Version as Version97_5_,
this_.BaseClassType as BaseClass2_97_5_,
this_1_.Width as Width99_5_,
this_1_.Height as Height99_5_,
this_2_.Width as Width100_5_,
this_2_.Height as Height100_5_,
this_3_.X as X101_5_,
this_4_.Width as Width102_5_,
this_4_.Height as Height102_5_,
this_5_.X as X103_5_,
FROM BaseClass this_
left outer join ClassC this_1_
on this_.BaseClassId = this_1_.ClassCId
left outer join ClassD this_2_
on this_.BaseClassId = this_2_.ClassDId
left outer join ClassA this_3_
on this_.BaseClassId = this_3_.ClassAId
left outer join ClassE this_4_
on this_.BaseClassId = this_4_.ClassEId
left outer join ClassB this_5_
on this_.BaseClassId = this_5_.ClassBId
WHERE and this_1_.Width between 0 /* @p8 */ and 'Height' /* @p9 */
所以才申請的高度和寬度限制到3個所需的類之一。
我在這裏尋找任何答案,如果它可以在HQL或Criteria API或任何需要實現結果。
道歉的文本牆!
謝謝。
似乎只是公平的您應得的答案,因爲你是第一人,在3年內嘗試:d我假設它的作品,因爲我還沒有在近3年的感動的ActiveRecord:d – Adam