我想用Hibernate Criteria Query的子對象列表查詢Parent對象。我知道如何用孩子的ID做,但不直接使用實體。Hibernate:Criteria按實體查詢子對象(關聯)(不是Id)
這工作:
List<Long> listOfChildLongChildIds = new ArrayList<Long>();
listOfChildLongChildIds.add(new Long(1));
listOfChildLongChildIds.add(new Long(2));
Criteria criteria = getSession().createCriteria(Parent.class);
Criteria criteriaChilds = criteria.createCriteria("childs");
criteriaChilds.add(Restrictions.in("id", listOfChildLongChildIds));
但如何做到這一點,當列表中包含的子對象/實體是這樣的:
List<Child> listOfChildEntities = new ArrayList<Child>();
listOfChildEntities.add(QueryChildFromDatabse);
listOfChildEntities.add(QueryChildFromDatabse);
(這意味着我不使用兒童的ID但只有Entitiy本身。原因是否則我將不得不迭代通過我的孩子列表,並提取所有ID並將它們放入列表中,我認爲這很可能是不必要的。但是我無法找到任何信息如何查詢由實體列表本身):
然後使用以上
criteriaChilds.add(Restrictions.in("id",listOfChildEntities));
會拋出異常的代碼:
兒童不能轉換爲java.lang.Long中
非常感謝您的回答!但問題是(至少在我的測試中,你的建議失敗了!),你命名爲「childs」的參數必須是(根據文檔)Child對象的屬性/成員。當我通過ID查詢時,它肯定是一個ID。我需要的是一個像這樣的語句:Restrictions.idIn();你有什麼特殊的文件,你的答案是基於?不過謝謝你的回答。 –
Markus
2012-04-16 06:39:57