2010-06-13 43 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

相关问题