我正在玩ORMlite来创建一个包含表格和关系的模型。 一种关系是多对多的关系。实现它的最佳方法是什么?
更具体:
假设我有两张桌子
Product
id
brand
Purchase
id
购买可以有多种产品,一种产品可以进行多次购买。
使用ORMLite我可以在每个模型中有@ForeignCollectionField
,但我认为它不会起作用。
我看到的唯一有效的解决方案是制作第三个表Product_Purchase,以便将产品和购买与多对一关系联系起来。
你们有什么想法?
答案 0 :(得分:27)
@ Romain的自我回答是正确的,但这里有更多关于后代的信息。正如他所提到的,有一个多对多ORMLite项目的例子,它展示了实现这一目标的最佳方法:
该示例使用具有两个对象的id的连接表来存储关系。在@ Romain的问题中,连接对象将同时具有Product
和Purchase
对象。类似的东西:
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`) )
然后使用内部查询查找与每个Product
关联的Purchase
个对象,反之亦然。有关详细信息,请参阅示例项目中的lookupPostsForUser()
方法。
自动执行此操作已有一些思考和设计工作,但现在ORMLite仅在内部处理一对多关系。
答案 1 :(得分:6)
好吧我想唯一的方法就是创建第三个表Product_Purchase。 它以sample project表示。
答案 2 :(得分:-1)
您必须创建一个ProductPurchase类并对其进行管理,就像它是另一个必须进入您的数据库的对象一样。
你可以(但你不必)在购买中有一个产品集合(反之亦然)但是当你从产品和购买中加载关系时,必须手动更新/创建它们。 ProductPurchase链接器表。拥有这些集合对于ORM来说没有任何意义(你赢了,不应该注释它们)。
如果有人正在寻找具有多对多关系的Android应用程序,我就是一个例子: https://github.com/arthurrauter/ormlite-android