使用JDO和GAE实现一对多关系

3

我已经在整个网站上搜索过了,但是甚至没有一个使用jdo制作一对多关系的例子。

https://developers.google.com/appengine/docs/java/datastore/jdo/relationships

但我没能找到如何做到这一点。

假设我有这个数据库:

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

我想为一辆新汽车创建一个新实体-我该如何做?

如果数据库中已经存在车主,我不想再为车主创建另一个实体,但如果他不存在,我想创建新的车主。

感谢任何关于如何处理此问题的示例代码或博客链接。

编辑: 看起来你认为这是双向关系。 所以我觉得你没有理解我的意思。 现在我们讨论的不是Car和Owner 我们现在讨论Genre和Song

Genre-不需要知道Song! Song需要知道它所属的Genre!

我的类有:

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

} AND:

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

谢谢提前!

2个回答

0
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);

这个例子不适合我,因为它是双向的。我希望汽车能知道所有者的情况,但所有者不需要知道汽车的情况! - David H
1
假设我们不是在谈论汽车和车主,而是在谈论歌曲和音乐流派。因此,它是N-1关系。音乐流派不需要知道所有的歌曲,但是歌曲需要知道它所属的流派! - David H

0

感谢提供任何有关如何处理它的示例代码或博客链接。我无法从网站上了解如何创建它! 当我添加@Join(name="ACCOUNT_USER")时,会出现以下错误: 注释类型Join的属性名称未定义。如果您能够提供完整的操作示例,这对整个社区都将非常有用...... 提前致谢。 - David H
该页面并没有给出完整的示例。也许你可以先在问题中发布你的类,这样人们就不必浪费时间去猜了。 - DataNucleus
所以你想将它表示为一个N-1 外键关系,该页面非常清楚地说明了将其视为1-1 UNI FK关系的相同方式,如http://www.datanucleus.org/products/accessplatform_3_2/jdo/orm/one_to_one.html#uni所述,该页面还提供了完整的示例。 - DataNucleus
它会在Genre表上创建重复实体吗? - David H
不。当然不会,除非你写了糟糕的持久化代码。 - DataNucleus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接