【问题标题】: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 与多对一关系联系起来。

大家怎么看?

【问题讨论】:

    标签: android database relationship ormlite


    【解决方案1】:

    @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;
        ...
    }
    

    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

      【讨论】:

        猜你喜欢
        • 2021-10-17
        • 2018-01-04
        • 1970-01-01
        • 2016-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-16
        • 2011-01-09
        相关资源
        最近更新 更多