我有一個對象內的對象,並希望使用最內部對象內的一個字段創建一個限制。現在我想這可以通過做類似的事情來實現:休眠Crtieria和限制不能正常工作
... .add(Restrictions.eq(「myObjectTwp.myObjectThree.myObjectsID」,mySearchId)).list();
但是,這似乎並不奏效。但是,我沒有收到任何錯誤消息,而是幾乎看起來像沒有考慮到這個限制。
我有一個對象內的對象,並希望使用最內部對象內的一個字段創建一個限制。現在我想這可以通過做類似的事情來實現:休眠Crtieria和限制不能正常工作
... .add(Restrictions.eq(「myObjectTwp.myObjectThree.myObjectsID」,mySearchId)).list();
但是,這似乎並不奏效。但是,我沒有收到任何錯誤消息,而是幾乎看起來像沒有考慮到這個限制。
您需要進行連接。在標準的API,這樣做最簡單的方法是使用createAlias()方法:
session.createCriteria(Child.class, "child")
.createAlias("child.parent", "theParent")
.add(Restrictions.eq("theParent.someField", theFieldValue))
.list();
此查詢等同於以下HQL:
select child from Child child
inner join child.parent theParent
where theParent.someField = :theFieldValue
我認爲這將有助於你分享你的映射文件(或註釋)。
舉例來說,在我的項目,我有以下幾點:
<hibernate-mapping>
<class name="Client" table="Client">
...
<many-to-one name="user" class="User" column="idUser"/>
而且
<hibernate-mapping>
<class name="User" table="User">
<property name="email" type="string"/>
閱讀在的Hiberante文檔http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html/querycriteria.html#querycriteria-associations如果我想查詢與特定用戶的電子郵件客戶端(合併JB Nizet的評論):
List clients = sess.createCriteria(Client.class)
.createAlias("user", "u")
.add(Restrictions.eq("u.email", "[email protected]"))
.list();
我不是無論如何。
不,您需要一個別名或子標準:'q.createAlias(「user」,「theUser」); q.add(Restrictions.eq(「theUser.email」,「[email protected]」));' –
我認爲這可能有幫助http://docs.jboss.org/hibernate/core/4.0/manual/ zh-CN/html/querycriteria.html#querycriteria-associations –
@JBNizet如果您可以將您的評論作爲答案解決了問題,謝謝。 – user1383163
您需要使用的次或者別名,正如標準查詢中有關關聯的文檔章節中所解釋的:http://docs.jboss.org/hibernate/core/4.2/manual/en-US/html_single/#querycriteria-associations –