我在我的Android应用程序的DAL层使用ORM GreenDAO。我在两个表之间的一对一关系中遇到了问题。例如:
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 Class
中调用page.getBookmark()
如果这是真的,我是否能以一对一的关系使其双向化?
答案 0 :(得分:5)
首先,一对一关系的良好用例很少见。你确定它不是一对多吗?如果你仍然认为它是一对一的:将两个实体合并为一个是否合理?
除此之外,bookmark.addToOne(page,pageIdProperty)还可以,而page.addToOne(bookmark,pageIdProperty)不起作用。 To-one关系要求id属性位于同一实体中。 To-many会以这种方式工作,请查看documentation on relation以获取详细信息。
答案 1 :(得分:1)
到目前为止,最佳解决方法是在外键存在的实体上使用addToOne,在另一端使用addToMany。它不是非常不方便,因为您只需要确保将一个对象添加到列表中。
答案 2 :(得分: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实体执行相同的步骤。