我使用的是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.
答案 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博文。