【问题标题】:Are @ManyToMany relationships not allowed in GAE?GAE 中是否允许 @ManyToMany 关系?
【发布时间】:2010-08-06 13:18:22
【问题描述】:

我的理解是,在 GAE JPA 支持下我不能:

@ManyToMany
    private Set<SSUser> contacts; 

    protected SSUser(){}

    public SSUser(final String userId, final String emailId){
        this.userId = userId;
        this.emailId = emailId;
        contacts = new HashSet<SSUser>();
    }

我正在尝试建立联系关系。我是否正确理解以上是不允许的?

如果是这样,Set&lt;String&gt; contactsIds 会被允许吗? 可以提供一个工作示例吗?

【问题讨论】:

    标签: google-app-engine jpa google-cloud-datastore


    【解决方案1】:

    是的,他们是不允许的。

    允许设置contactIds?可以提供一个工作示例吗?

    它有效,请参阅: http://screenshoter.svn.sourceforge.net/viewvc/screenshoter/screenshoter/trunk/SS-server/src/com/mysimpatico/ss/server/SS_serverServlet.java?revision=8&view=markup

    【讨论】:

    • 是的,当您将每一侧标记为 @Unowned 时,它们是允许的
    【解决方案2】:

    来自有关数据存储不支持的在线文档:

    Unsupported Features of JPA 2.0

    JPA 的以下特性 应用程序不支持接口 引擎实现:

    • 拥有多对多关系
    • “加入”查询。您不能在过滤器中使用子实体的字段 在对父级执行查询时 种类。请注意,您可以测试 父母的关系字段直接 使用键进行查询。
    • 聚合查询(分组依据、拥有、总和、平均、最大值、最小值)
    • 多态查询。您不能执行一个类的查询来获取 子类的实例。每个班级都是 由单独的实体种类表示 在数据存储中。

    【讨论】:

    • 正是在阅读我发布的内容之后!您将如何在仍然使用 JPA 的 GAE 中实现这种非常基本的关系?设置 联系人UsrIds?没有比这更好的了吗?
    • @simpatico:GAE 解决方法是映射Key 集合,请参阅code.google.com/appengine/docs/java/datastore/…。此参考适用于 JDO,但我的理解是您可以将概念转换为 JPA(遗憾的是,JPA 文档很糟糕,就像 Google 不希望您使用 JPA)。
    • 我也有同样的感觉!是否有 GAE JPA 演示/示例?
    • Google 希望您使用 JDO,因为 JPA 在设计时考虑到了关系 (SQL) 数据库。 App Engine 的数据存储区不是 SQL 数据库。来自维基百科:'Java Persistence API 仅为 RDBMS 指定关系持久性(ORM:对象关系映射)(尽管存在支持其他数据存储的提供程序)。 Java 数据对象规范提供关系持久性 (ORM),以及对其他类型数据存储的持久性。'
    • @Pascal Thivent 我同意将 JPA 列为受支持但没有很好的文档是蹩脚的。也许他们需要说 JPA 支持是“预测试版”或更好地描述其状态为二等公民的东西。积极的一面是,在 JPA 和 JDO 中都有一些很好的花絮:googleappengine.blogspot.com/2009/12/…
    猜你喜欢
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2013-05-19
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多