GreenDao和实体继承

时间:2015-11-25 17:54:23

标签: java android orm greendao

我的任务是在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数据,其中每个子类都可以编写所需的任何内容。

我的问题是:

  1. GreenDao在这种情况下是好的解决方案吗?是否有任何解决方案可以不用担心继承 - 以及它们在效率方面的成本是多少。
  2. 如何将数据“序列化”到这样的字段(我应该覆盖哪种方法或者我应该将代码放在哪里以完成所有必要的事情
  3. 如何给GreenDao正确的构造函数“反序列化”Json或二进制文件以更正类实例
  4. 我应该使用反射 - 或只是切换/大小写来找到正确的构造函数(只有5种类型的构造函数可能) - 反映在这种情况下反射会“花费多少”?

1 个答案:

答案 0 :(得分:3)

如果你真的需要继承greendao不是我可以选择的,因为它不支持它。但我认为你可以没有继承:

您可以使用鉴别器列(messagetype)和二进制或文本列(数据)设计实体。然后,您可以使用抽象工厂根据消息类型从数据创建所需对象。

如果转换很复杂,我会将它放在一个单独的类中,否则我会把它作为一个方法放在保留部分。

请注意,如果您确实有很多消息,这种设计可能会降低您的速度,因为单独的表会减少索引大小。 谈论索引:如果您想稍后通过数据列的某些属性访问消息,那么您就会被搞砸,因为您无法在其上添加索引。