我有一个基类Peripheral。类SensorMasterPeripheral的扩展。我需要ORMlite实例化以前保存的Peripheral对象。显然,由于其抽象性,任何尝试以反射方式实例化Peripheral的尝试都会导致ClassInstantiationException。由于Peripheral是抽象的,我如何让ORMlite加载任何Peripheral对象?

这是我在做什么的示例:

@DatabaseTable(tableName="Peripheral")
abstract class Peripheral {
    @DatabaseField(generatedId="true")
    int _ID;
    @DatabaseField
    int mSerial;
}

class Sensor extends Peripheral {
}

class Master extends Peripheral {
}

最佳答案

由于外围设备是抽象的,我如何让ORMlite加载任何外围设备对象?


我认为您的问题源于@DatabaseTable必须在SensorMaster类上的事实。也不会出现在基类上,但不会在那里被发现。

这将有一个名为"Peripheral"的表用于两个超类。基类的任何字段(例如mSerial)都将被检测到并用作两个超类中的字段。

唯一的限制是ORMLite无法区分SensorMaster。现在它缺少该功能,该功能允许您获取所有Sensor行和所有Master行。另外,如果超类具有标记为@DatabaseField的自己的字段,则无法为其生成架构。

编辑:

重要的是要重申,ORMlite(自3/2013起)在同一表中不支持多个子类。子类将从基类继承数据库字段,但每个子字段必须位于各自的表中。这是邮件列表上的discussion about this topic

为此,您可以有3个表:1个用于基类信息,2个用于子类。子类表将具有关联基类行的外键。

关于android - 您如何将ORMLite与抽象类一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11569751/

10-09 06:26