【问题标题】:Many-to-One relationship with JDO and GAE与 JDO 和 GAE 的多对一关系
【发布时间】:2012-11-22 05:02:41
【问题描述】:

我已经搜索了整个网站 但是甚至没有一个例子说明如何使用 jdo 建立多对一关系。 https://developers.google.com/appengine/docs/java/datastore/jdo/relationships

但我不知道该怎么做。

假设我有这个数据库:

Cars(CarID,OwnerID,...)
Owner(OwnerID,...)

我想为一辆新车创建新实体 - 我该怎么做?

如果所有者已经在数据库中,我不想为所有者创建另一个实体,但如果他不是,我想创建新所有者。

感谢任何有关如何处理它的示例代码或博客链接。

编辑: 它似乎你认为它的双向关系。 所以我认为你没有很好地理解我。 假设我们不是在谈论汽车和所有者 我们现在正在谈论流派和歌曲

流派-不需要了解歌曲! 歌曲需要知道他的流派!

我的课程是:

public class Genre {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
long id;
@Persistent
String genre;

} 和:

public class Song{
long id;
    @Join(name="GENRE_JOIN")
Genre genre;

}

提前致谢!

【问题讨论】:

    标签: java google-app-engine jdo


    【解决方案1】:

    所有 GAE 文档都说请参阅 DataNucleus JDO 文档以获取完整详细信息,因此我不明白为什么他们应该提供所有示例。由于您的关系看似(不是您定义它)​​在 Owner 侧是 1-N BIDIR 关系,在 Car 侧是 N-1 BIDIR 然后http://www.datanucleus.org/products/accessplatform_3_1/jdo/orm/many_to_one.html JDO 规范也有很多例子。

    【讨论】:

    • "感谢您提供有关如何处理它的任何示例代码或博客链接。"我无法从网站上获得如何制作它!当我输入 @Join(name="ACCOUNT_USER") 时,我收到此错误:注释类型的属性名称未定义如果您要放置完整示例来说明如何操作,它将对所有社区都有用.. . 提前谢谢
    • 该页面确实提供了一个完整的示例。也许如果您首先在问题中发布您的课程,那么人们就不必花时间猜测
    • 因此您想将其表示为 N-1 外键 关系,该页面非常清楚地将其视为 1-1 UNI FK 关系,如每datanucleus.org/products/accessplatform_3_2/jdo/orm/… 也给出了一个完整的例子
    • 它会在 Genre 表上创建重复的实体吗?
    • 没有。显然不是,当然除非你写了糟糕的持久性代码。
    【解决方案2】:
    class Owner {
        @Persistent(mappedBy = "owner")
        private List<Car> cars;
    }
    
    class Car {
        @Persistent
        private Owner owner;
    }
    
    Car car = new Car();
    //search for the owner.
    car.setOwner(owner);
    

    【讨论】:

    • 这个例子对我不利,因为它是双向的。我希望汽车知道车主。但车主不需要懂车!
    • 让我们说我们不是在谈论汽车和车主!我们正在谈论歌曲和流派。所以它的N-1关系。流派不需要知道所有的歌曲。但是歌曲需要知道他的流派!
    猜你喜欢
    • 2013-11-11
    • 1970-01-01
    • 2013-04-17
    • 2010-12-30
    • 1970-01-01
    • 2015-03-15
    • 2011-03-01
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多