java - GreenDao 和实体继承

标签 java android orm greendao

我的任务是在 Android 操作系统上为我的应用程序创建磁盘缓存(它是某种信使)。我想将消息存储在数据库中,但遇到了存储不同类型消息的问题(目前有 5 种类型的消息,每种类型都有自己的字段,它们都扩展了基类)

GreenDao documentation说:

注意:目前不可能有另一个实体作为父类(super class)(也没有多态查询)

我计划拥有与基类几乎 1 比 1 的实体,除了一列 - 原始二进制或 json 数据,每个子类都可以在其中写入任何它需要的内容。

我的问题是:

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

最佳答案

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

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

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

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

关于java - GreenDao 和实体继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33923328/

相关文章:

javascript - 使用 ionic 3 框架的 Android 上的 SMS url 无法打开消息应用程序

mysql - 使用 peewee 连接 mysql 以及访问表的一些问题

PHP Doctrine 2 ORM : Non-Entity object as attribute in entity

java - 如何调整 wicket 应用程序的性能

java - JScrollPane 未显示

java - 客户端服务器应用+java

基于Java的任务处理服务器

java - 在 Android 中设置日历字段

java - 在 Java 中使用 Hibernate 的 DetachedCriteria 来限制结果的最佳方法是什么?

android - 如何将现有项目从 GitHub 导入 Android Studio?