繁体   English   中英

GreenDAO如何建立双向的一对一关系?

[英]How to make a bidirectional one-to-one relation by GreenDAO?

我将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类中调用page.getBookmark()

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

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

除此之外,bookmark.addToOne(page,pageIdProperty)还可以,而page.addToOne(bookmark,pageIdProperty)不起作用。 一对一关系要求id属性位于同一实体中。 一对多将以这种方式工作,请查看有关关系文档以了解详细信息。

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

您有几个错误。 首先,您需要在书签的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实体执行相同的步骤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM