2012-02-07 126 views
19

我目前正在玩ORMlite来制作一个带有表格和关系的模型。 一种关系是多对多的关系。什么是最好的实现方式?使用ORMLite实现多对多关系的最佳方式是什么?

更具体:

比方说,我有这两个表

Product 
    id 
    brand 

Purchase 
    id 

一次购买可以有多个产品,一个产品可以在几个购买。 使用ORMLite我可以在每个模型中有一个@ForeignCollectionField,但我不认为它会起作用。 我看到的唯一有效解决方案是创建第三个表Product_Purchase,将Product和Purchase与多对一关系链接起来。

你们有什么想法?

回答

27

@罗曼的自我回答是正确的,但这里有一些关于后人的更多信息。当他提到有一个例子多到许多ORMLite项目演示做到这一点的最好办法:

http://ormlite.com/docs/example-many

的示例使用连接表与两个对象的ID的存储关系。在@罗曼的问题中,连接对象将具有ProductPurchase对象。喜欢的东西:

public class ProductPurchase { 
    @DatabaseField(generatedId = true) 
    private int id; 
    @DatabaseField(foreign = true) 
    private Product product; 
    @DatabaseField(foreign = true) 
    private Purchase purchase; 
    ... 
} 

ID字段获取从中产生像表中的对象提取:

CREATE TABLE `userpost` (`id` INTEGER AUTO_INCREMENT , `user_id` INTEGER , 
    `post_id` INTEGER , PRIMARY KEY (`id`)) 

然后使用内查询,找到与各Purchase,反之亦然相关的Product对象。有关详细信息,请参阅示例项目中的lookupPostsForUser()方法。

自动完成此操作已经有一些想法和设计工作,但现在ORMLite仅在内部处理一对多关系。

+0

好了很多灰色的感谢!我只是想确定,并且你解释得很好。 – 2012-02-07 16:43:19

+1

谢谢你的答案,但灰色,这个事实是真的很差的文件..不适合大规模的Android应用程序,想要使用ORMLite .. – eento 2013-08-19 12:34:56

+0

你可以更具体的@eento?你能写一些更好的文档吗? – Gray 2013-08-20 12:57:06

6

好吧我想唯一的方法是创建第三个表Product_Purchase。 它显示在sample project

-1

您必须创建一个ProductPurchase类并对其进行管理,就像它是另一个必须进入数据库的对象。

您可以(但不一定)在采购内有产品集合(反之亦然),但是当您从产品采购中加载产品和采购之间的关系时,必须手动更新/创建它们链接器表。拥有这些集合对ORM没有任何意义(你不会也不应该注释它们)。

如果有人正在寻找和Android应用程序与许多对许多关系,我研究一个例子: https://github.com/arthurrauter/ormlite-android

相关问题