我的任务是在Android OS上为我的应用程序制作磁盘缓存(它是某种信使)。我想将消息存储在数据库中,但遇到了存储不同类型消息的问题(目前有5种类型的消息,每种类型都有自己的字段,它们都扩展了基类)
GreenDao documentation说:
Note: currently it’s impossible to have another entity as a super class (there are no polymorphic queries either)
我计划将实体几乎1对1添加到基类中,除了一列 - 原始二进制或json数据,其中每个子类都可以编写所需的任何内容。
我的问题是:
答案 0 :(得分:3)
如果你真的需要继承greendao不是我可以选择的,因为它不支持它。但我认为你可以没有继承:
您可以使用鉴别器列(messagetype)和二进制或文本列(数据)设计实体。然后,您可以使用抽象工厂根据消息类型从数据创建所需对象。
如果转换很复杂,我会将它放在一个单独的类中,否则我会把它作为一个方法放在保留部分。
请注意,如果您确实有很多消息,这种设计可能会降低您的速度,因为单独的表会减少索引大小。 谈论索引:如果您想稍后通过数据列的某些属性访问消息,那么您就会被搞砸,因为您无法在其上添加索引。