Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绿道如何实现双向一对一关系?_Java_Android_Orm_Greendao - Fatal编程技术网

Java 绿道如何实现双向一对一关系?

Java 绿道如何实现双向一对一关系?,java,android,orm,greendao,Java,Android,Orm,Greendao,我在Android应用程序的DAL层使用ORM GreenDAO。两个表之间的一对一关系有问题。例如: Entity page = schema.addEntity("Page"); Entity bookmark = schema.addEntity("Bookmark"); Property pageIdProperty = bookmark.addLongProperty("pageId").getProperty(); bookmark.addToOne(page, pageIdPr

我在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.getBookmark()


如果这是真的,我有什么办法可以使一对一关系具有双向性吗?

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


除此之外,bookmark.addToOne(page,pageIdProperty)还可以,而page.addToOne(bookmark,pageIdProperty)不起作用。一对一关系要求id属性位于同一实体中。对于许多这样做的人,请查看详细信息。

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

您有几个错误。首先,您需要在书签上创建PK-before-FK属性

试试这个:

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

对页面实体执行相同的步骤。

我个人1对1的原因是延迟加载。我从您的实现中了解到,lazy仅在“实体(列表)的属性”上受支持。具体示例是:myCalendarEntity.getGoogleSyncData().getGoogleId()。。。我不想加载GoogleSyncData对象,因为我只在需要同步时才需要它(这并不常见)。我有一个用例,其中一方是来自服务器的同步实体(因此对于应用程序逻辑来说,它应该是只读的),另一方是本地数据,可以由应用程序写入+1对于双向OneToOne关系:)