使用 ORMLite 实现多对多关系的最佳方法是啥?
Posted
技术标签:
【中文标题】使用 ORMLite 实现多对多关系的最佳方法是啥?【英文标题】:What is the best way to implement many-to-many relationships using ORMLite?使用 ORMLite 实现多对多关系的最佳方法是什么? 【发布时间】:2012-02-28 19:38:38 【问题描述】:我目前正在使用 ORMlite 来制作包含表格和关系的模型。 一种关系是多对多关系。实现它的最佳方式是什么?
更具体一点:
假设我有这两张表
Product
id
brand
Purchase
id
一次购买可以有多个产品,一个产品可以在多个购买中。
使用 ORMLite,我可以在每个模型中都有一个 @ForeignCollectionField
,但我认为它不会起作用。
我看到的唯一有效解决方案是制作第三个表 Product_Purchase 以将 Product 和 Purchase 与多对一关系联系起来。
大家怎么看?
【问题讨论】:
【参考方案1】:@Romain 的自我回答是正确的,但这里有更多信息供后人参考。正如他所提到的,有一个示例多对多ORMLite 项目,它展示了执行此操作的最佳方法:
http://ormlite.com/docs/example-many
该示例使用一个包含两个对象 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`) )
然后您使用内部查询来查找与每个 Purchase
关联的 Product
对象,反之亦然。详见示例项目中的lookupPostsForUser()
方法。
围绕自动执行此操作进行了一些思考和设计工作,但目前 ORMLite 仅在内部处理一对多关系。
【讨论】:
好的,非常感谢格雷!我只是想确定一下,你解释得很好。 也感谢您的回答,但 Gray,这个事实的文档记录真的很差。对于想要使用 ORMLite 的大型 android 应用程序来说并不好。。 你能更具体点@eento 吗?你能写一些更好的文档吗?lookupPostsForUser()
在这里:github.com/j256/ormlite-jdbc/blob/…
我理解它为什么以及如何工作。但是,这会改变数据的表示。购买不应该有一个产品集合(列表)并且产品有一个它们所属的购买集合吗?【参考方案2】:
好的,我想唯一的方法是创建第三个表 Product_Purchase。 它在sample project 中指明。
【讨论】:
【参考方案3】:您必须创建一个 ProductPurchase 类并像管理另一个必须进入数据库的对象一样管理它。
您可以(但您不必)在 Purchases 中拥有一组产品(反之亦然),但是当您从 ProductPurchase 链接器加载产品和购买之间的关系时,必须手动更新/创建它们桌子。拥有这些集合对 ORM 没有任何意义(您不会也不应该对它们进行注释)。
如果有人正在寻找具有多对多关系的 Android 应用程序,我做了一个示例: https://github.com/arthurrauter/ormlite-android
【讨论】:
以上是关于使用 ORMLite 实现多对多关系的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章