我是relativley關係數據庫的新手,我在創建查詢時遇到了一些問題。首先,我想盡快解釋這種情況。我有幾個實體類。他們全部延伸AbstractEntity
或EntityProperty
。所以實體可以擁有屬性和屬性擁有實體,所以存在雙向關係。
現在讓我們假設ConcreteEntity
延伸AbstractEntity
,我想要創建像這樣的查詢:獲取所有類型爲ConcreteEntity
的實體,它至少在屬性名稱中包含給定列表propertyNames
。到現在爲止,我有以下的工作條件查詢:條件API:按類類型過濾
CriteriaQuery<AbstractEntity> cq = cb.createQuery(AbstractEntity.class);
Root<EntityProperty> property = cq.from(EntityProperty.class);
Join<EntityProperty, AbstractEntity> entity = property.join(EntityProperty_.owningEntities);
cq.where(property.get(EntityProperty_.name).in((Object[]) propertyNames));
cq.select(entity);
但現在我只想ConcreteEntity
類型的實體。我怎麼能做到這一點? 在JPQL中我寫了「SELECT實體FROM EntityProperty屬性JOIN property.owningEntities實體」,這裏我也不知道如何以只返回特定類型的方式編寫它...
感謝您提前給出解答!
編輯:移動第二個問題,以criteria query: indistinct result lists併除去在代碼(沒有工作)
如果你有這個查詢參數化使用泛型?然後你可以說在編譯時需要AbstractEntity或者ConcreteEntity(不知道這是否合理) – Leo 2014-10-06 22:55:03
當我將實體定義爲root時,我可以這樣做。然後我可以明確地定義這個班級。這裏的問題是我通過配件屬性的owningEntities屬性來訪問實體。並且該屬性具有List類型。 –
Jogi
2014-10-06 23:02:11