2010-06-13 41 views
4

我使用Google App Engine。當我嘗試做一個JPA查詢這樣的:如何在Google App Engine的ManyToOne方面通過其父母過濾實體

SELECT p FROM Participant p 
WHERE p.party.id = :partyKey AND p.name=:participantName 

我收到以下錯誤

Caused by: org.datanucleus.store.appengine.FatalNucleusUserException: 
SELECT FROM Participant p WHERE p.party.id = :partyKey AND p.name=:participantName: 
Can only reference properties of a sub-object if the sub-object is embedded. 

我給了黨的對象作爲參數的關鍵「partyKey」命名的參數。

模型是這樣的:派對有多個參與者。

我想根據參與者和參與者的姓名查詢參與者。我只是無法弄清楚如何使用派對過濾。我有什麼選擇?

我也嘗試以下查詢:

SELECT FROM Participant p 
WHERE p.party = :party AND p.name=:participantName 

,但它會導致以下錯誤:

Caused by: org.datanucleus.store.appengine.FatalNucleusUserException: 
SELECT FROM Participant p WHERE p.party = :party AND p.name=:participantName: 
Key of parameter value does not have a parent. 

回答

3

可以通過聲明父 - pk場做祖先查詢。然後,您可以使用該字段篩選子對象。檢查the documentation中關於「parent-pk」的部分(並且確定確定讀取this discussion)。

更新:對於JPA,看來你將宣佈這樣的:

@Extension(vendorName="datanucleus", key="gae.parent-pk") 
private Long parentId; 

您可能還需要閱讀Querying with Key parameters博客文章。

+0

我正在使用JPA,該文檔是針對JDO的。我如何聲明一個父-PK字段? – palto 2010-06-13 15:48:06

+1

@palto:是的,文檔是用於JDO的,但是這也適用於JPA。我同意,GAE的JPA文檔很糟糕(它就像Google不希望你使用JPA)...... – 2010-06-13 15:59:54

相關問題