【问题标题】:Create multiple tables for one class in ORMLite在 ORMLite 中为一个类创建多个表
【发布时间】:2012-08-20 13:35:23
【问题描述】:

我在 Android 上使用 ORMLite 并且有以下问题: 是否可以基于单个 Java 类创建多个表?

这些表应该只是它们的名称不同,而对它们的访问应该是按名称。

例如,如果我有一个班级:

public class Order{
    @DatabaseField
    public string Name;

    @DatabaseField
    public string Amount;
}

我有一个动态数量的模块可以创建订单。我希望每个模块都有自己的表,但所有表都应该有类似的架构。

我知道我可以在 Order 类中添加一个字段来指示源模块名称,并将所有订单放在一个表中,但我想知道是否有一种方法可以分隔表(为了更快的查询,更快的删除来自同一模块的订单等等)

谢谢!

【问题讨论】:

    标签: java android ormlite


    【解决方案1】:

    这里最大的问题是“动态”是什么意思。如果您的意思是您需要即时创建这些模块 Orders 并且您事先不知道它们的名称,那么我相信模块名称字段是执行此操作的有效方法。为每种类型的订单创建一个表对我来说似乎是过早的优化——没有充分理由的复杂性。

    也就是说,您可以通过为每个表实例化 DatabaseTableConfigdefining the class programmatically 来完成动态类。

    如果您不是真的指动态,那么将每个模块 Order 放在自己的表中的最简单方法是使用子类。

    你可以:

    @DatabaseTable
    public class FooOrder extends Order {
        // fields will be gotten from Order
    }
    
    @DatabaseTable
    public class BarOrder extends Order {
        // fields will be gotten from Order
    }
    

    Order 中的字段将位于 fooorderbarorder 表中。

    【讨论】:

    • 谢谢,我会投赞成票,但不幸的是还没有声誉......子类解决方案在我的情况下不起作用,因为模块是真正动态创建的。如果我采用 TableConfig 建议,那么我将如何获得 Dao?我应该使用 DaoManager.createDao(connectionSource, tableConfig) (我猜 DaoManager 不会以这种方式缓存它)还是 DaoManager 中的任何其他功能组合?
    • 是的,您使用DaoManager.createDao(connectionSource, tableConfig)DaoManager 缓存它,但前提是使用相同的表配置。
    • @Gray 你能告诉我是否可以使用 DataBasetableConfig 使用单个类来创建不同的表。如果可以,请给我发送一个帮助类创建表的示例。
    • 你能使用这个@Adi 的邮件列表吗?我不太清楚你在问什么。 groups.google.com/forum/#!forum/ormlite-user
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多