如何在Google App Engine的ManyToOne端按父母过滤实体

时间:2010-06-13 13:39:49

标签: java google-app-engine jpa

我使用的是Google App Engine。当我尝试执行这样的JPA查询时:

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.

我将Party对象的密钥作为参数提供给“partyKey”命名参数。

模型是这样的:Party有多个参与者。

我想根据参与者和参与者的姓名查询参与者。我只是无法弄清楚如何使用派对进行过滤。我有什么选择?

我也尝试了以下查询:

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.

1 个答案:

答案 0 :(得分:3)

您可以通过声明parent-pk字段来执行祖先查询。然后,您可以使用该字段筛选子对象。在the documentation中查看有关“parent-pk”的部分(并确定以阅读this discussion)。

更新:对于JPA,您似乎会将其声明为:

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

您可能还想阅读Querying with Key parameters博文。