使用ORMLite实现多对多关系的最佳方法是什么?

Rom*_*iel 19 database android relationship ormlite

我正在玩ORMlite来制作一个包含表格和关系的模型.一种关系是多对多的关系.实现它的最佳方法是什么?

更具体一点:

假设我有这两张桌子

Product
   id
   brand

Purchase
   id
Run Code Online (Sandbox Code Playgroud)

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

你们有什么想法?

Gra*_*ray 27

@ Romain的自我回答是正确的,但这里有更多关于后代的信息.正如他所提到的,有一个多对多ORMLite项目的示例,它演示了执行此操作的最佳方法:

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

该示例使用具有两个对象的id的连接表来存储关系.在@ Romain的问题中,连接对象将同时具有ProductPurchase对象.就像是:

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

id字段从对象中提取,创建一个表,如:

CREATE TABLE `userpost` (`id` INTEGER AUTO_INCREMENT , `user_id` INTEGER ,
    `post_id` INTEGER , PRIMARY KEY (`id`) ) 
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用内部查询来查找Product与每个对象关联的对象,Purchase反之亦然.有关lookupPostsForUser()详细信息,请参阅示例项目中的方法.

自动执行此操作已有一些思考和设计工作,但现在ORMLite仅在内部处理一对多关系.


Rom*_*iel 6

好吧我想唯一的方法就是创建第三个表Product_Purchase.它在示例项目中指出.