我想翻譯HQL的這種結構:翻譯HQL子查詢標準
FROM Entity_1 obj
WHERE obj IN (FROM Entity2) OR
obj IN (FROM Entity3)
如何能不能做到?
我想翻譯HQL的這種結構:翻譯HQL子查詢標準
FROM Entity_1 obj
WHERE obj IN (FROM Entity2) OR
obj IN (FROM Entity3)
如何能不能做到?
甲的DetachedCriteria也可被用於表達子查詢。涉及子查詢的標準實例可以通過子查詢或屬性獲取。
DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)
.setProjection(Property.forName("weight").avg());
session.createCriteria(Cat.class)
.add(Property.forName("weight").gt(avgWeight))
.list();
DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)
.setProjection(Property.forName("weight"));
session.createCriteria(Cat.class)
.add(Subqueries.geAll("weight", weights))
.list();
相關子查詢也是可能的:
DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, "cat2")
.setProjection(Property.forName("weight").avg())
.add(Property.forName("cat2.sex").eqProperty("cat.sex"));
session.createCriteria(Cat.class, "cat")
.add(Property.forName("weight").gt(avgWeightForSex))
.list();
我非常新的HQL,但我建議像下面這樣:
DetachedCriteria sub1 = DetachedCriteria.forClass(Entitiy2);
DetachedCriteria sub2 = DetachedCriteria.forClass(Entity3);
Criteria criteria = getYourSession().createCriteria(Entity_1.class, "obj");
criteria.add(Restrictions.or(Subqueries.propertyIn("obj", sub1), Subqueries.propertyIn("obj", sub2));
請糾正我,如果我錯了。
謝謝!但是我仍然不清楚如何將這個應用於我暴露的問題?你可以編輯你的問題,以解決一些僞代碼?謝謝! – edutesoy
你的子查詢應該由DetachedCriteria實例實現,然後用在你的主標準中。 – Guillaume
是的,我知道,但我不知道如何應用「IN」條款。 – edutesoy