我有一个基类Peripheral
。类Sensor
和Master
是Peripheral
的扩展。我需要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
必须在Sensor
和Master
类上的事实。也不会出现在基类上,但不会在那里被发现。
这将有一个名为"Peripheral"
的表用于两个超类。基类的任何字段(例如mSerial
)都将被检测到并用作两个超类中的字段。
唯一的限制是ORMLite无法区分Sensor
和Master
。现在它缺少该功能,该功能允许您获取所有Sensor
行和所有Master
行。另外,如果超类具有标记为@DatabaseField
的自己的字段,则无法为其生成架构。
编辑:
重要的是要重申,ORMlite(自3/2013起)在同一表中不支持多个子类。子类将从基类继承数据库字段,但每个子字段必须位于各自的表中。这是邮件列表上的discussion about this topic。
为此,您可以有3个表:1个用于基类信息,2个用于子类。子类表将具有关联基类行的外键。
关于android - 您如何将ORMLite与抽象类一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11569751/