本文介绍了创建一个包含多层次的外键的表时ORM精简版会抛出错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我对ORM精简版创建表时ActivityLog收到此错误:
4月10日至23日:06:32.255:E / com.timelord.dao.DatabaseHelper(1487):
值java.sql.SQLException:引起ORMLite不能储存未知的类级
com.timelord.pojo.Category现场类别。序列化字段必须
指定的dataType = DataType.SERIALIZABLE
我怀疑,这是由多级外键引起的。正如你可以从下面的POJO类看,ActivityLog有活动,并且活动具有类别。
活动和分类工作正常。
如何做正确的映射?任何想法
@DatabaseTable(tableName值=activityLogs)
公共类AcitvityLog实现Serializable { 私有静态最后的serialVersionUID长1L =; @DatabaseField(generatedId =真)
私人诠释身份证; @DatabaseField(canBeNull = FALSE)
@DatabaseFieldForeign(外资=真)
私人活动活动; @DatabaseField(dataType的= DataType.DATE,canBeNull = FALSE)
私人时间戳的开始; @DatabaseField(dataType的= DataType.DATE,canBeNull = TRUE)
私人时间戳结束;
}@DatabaseTable(tableName值=活动)
公共类活动扩展BaseEntity实现Serializable { 私有静态最后的serialVersionUID长1L =; @DatabaseField(canBeNull = FALSE)
@DatabaseFieldForeign(外资=真)
私人范畴类;
}@DatabaseTable(tableName值=类别)
公共类范畴扩展BaseEntity实现Serializable { 私有静态最后的serialVersionUID长1L =;
}公共类BaseEntity {
@DatabaseField(generatedId =真)
私人整数ID; @DatabaseField(canBeNull = FALSE)
私人字符串名称;
}
解决方案
没有,可以处理多层次外键没有任何问题。问题是,你不能混用 @DatabaseField
和 @DatabaseFieldForeign
注释。你想要的是:
@DatabaseField(canBeNull =假,外资= TRUE)
私人活动活动;
或者,如果你想使用的Android下运行得更快更小的注解:
@DatabaseFieldSimple(canBeNull = FALSE)
@DatabaseFieldForeign(外资=真)
无论您使用的只是的的 @DatabaseField
或 @DatabaseFieldSimple
和其他 @DatabaseField ...
注释。下面是该文档 @DatabaseFieldSimple
:
这篇关于创建一个包含多层次的外键的表时ORM精简版会抛出错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!