4

我将 ORM GreenDAO 用于我的 Android 应用程序的 DAL 层。我在两个表之间存在一对一关系的问题。例如:

Entity page = schema.addEntity("Page");
Entity bookmark = schema.addEntity("Bookmark");

Property pageIdProperty = bookmark.addLongProperty("pageId").getProperty();

bookmark.addToOne(page, pageIdProperty); // any bookmark related to a page
page.addToOne(bookmark, pageIdProperty); // any page can has a bookmark

这种关系是错误的吗?

当我定义它时,我无法page.getBookmark()页面类中调用

如果这是真的,有什么办法可以使它成为一对一关系的双向?

4

3 回答 3

5

首先,一对一关系的良好用例很少见。你确定这不是一对多吗?如果您仍然认为这是一对一的:将两个实体合并为一个是否有意义?

除此之外,bookmark.addToOne(page, pageIdProperty) 很好,而 page.addToOne(bookmark, pageIdProperty) 不起作用。一对一关系要求 id 属性位于同一实体中。许多人会以这种方式工作,请查看有关关系的文档以获取详细信息。

于 2012-08-02T12:22:34.483 回答
1

到目前为止,最好的解决方法是在存在外键的实体上使用 addToOne,在另一边使用 addToMany。这并不是非常不方便,因为您只需确保将一个对象添加到列表中。

于 2013-11-25T16:44:21.990 回答
0

你有几个错误。首先,您需要在书签上的 FK 属性之前创建一个 PK。

尝试这个:

Entity page = schema.addEntity("Page"); 
Entity bookmark = schema.addEntity("Bookmark");

bookmark.addLongProperty("bookmarkId").primaryKey().autoincrement();
Property fkPage = bookmark.addLongProperty("pageId").getProperty();

bookmark.addToOne(page, fkPage).setName("page"); 

对 Page 实体执行相同的步骤。

于 2018-04-19T19:24:11.370 回答