【问题标题】:How to filter entities by their parents in ManyToOne side in Google App Engine如何在 Google App Engine 的 ManyToOne 端按父项过滤实体
【发布时间】:2010-06-13 13:39:49
【问题描述】:

我使用 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 有多个 Participants。

我想根据聚会和参与者的姓名查询参与者。我只是不知道如何使用派对进行过滤。我有什么选择?

我也尝试过以下查询:

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.

【问题讨论】:

    标签: java google-app-engine jpa


    【解决方案1】:

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

    更新:对于 JPA,您似乎会这样声明:

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

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

    【讨论】:

    • 我正在使用 JPA,并且该文档适用于 JDO。究竟如何声明 parent-pk 字段?
    • @palto:是的,文档适用于 JDO,但这也适用于 JPA。我同意,GAE 的 JPA 文档很糟糕(就像 Google 不希望你使用 JPA)......
    猜你喜欢
    • 2011-02-02
    • 2016-06-21
    • 1970-01-01
    • 2010-10-06
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多