代码之家  ›  专栏  ›  技术社区  ›  palto

在Google应用引擎中,如何在多个方面按其父母筛选实体

  •  4
  • palto  · 技术社区  · 14 年前

    我使用谷歌应用引擎。当我尝试执行这样的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对象的键作为“party key”命名参数的参数。

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

    我要根据参与方和参与方的名称查询参与方。我就是不知道怎么用派对过滤。我有什么选择?

    我还尝试了以下查询:

    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 回复  |  直到 14 年前
        1
  •  3
  •   Pascal Thivent    14 年前

    您可以通过声明父pk字段来执行祖先查询。然后可以使用该字段筛选子对象。检查中关于“parent pk”的部分 the documentation (并且) 当然 阅读 this discussion )

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

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

    您可能还想阅读 Querying with Key parameters 博客帖子。