最近公司项目需要使用greendao存储本地数据库
遇到了一些问题记录一下,主要是一对多表关联查不出子表数据问题。
greendao使用相信大家网上一搜大量教你试用文章所以前面就不记录了。
贴几个标签
@Id 标明主键
@NotNull 非空
@Unique 添加唯一约束 (一般外键关联字表使用)
@JoinProperty 对于更复杂的关系,可以使用这个注解标明目标属性的源属性
@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb="name")
@ToMany:表示一对多属性
坑一:有个坑就是在这里,由于我没有设置@Property这个属性,自动生成的Dao会把你的外键自动转换为大写,如:
主表:
字表:
而,我关联字表设置为
user_id 为小写,导致查不到字表信息。
然后一对多关联,我觉得好理解的就是用主表外键来关联,如:
主表:User 用户表 字表:Order 订单表
User表有 id,user_id,name...
//一对多关联 @ToMany(joinProperties = {@JoinProperty(name = "user_id",referencedName = "user_id")}) public List<Order> orderList;
Order表有 id,name,user_id...
通过user_id外键关联,即,使用父表user_id来关联。
坑二:
当修改外键由Long类型改为String类型时,老是提示
Please either mark it with @Keep annotation instead of@Generated...
这是由于主键唯一性
修改就是把自动生成的dao删掉,get,set方法删掉,重新生成。
坑三:
打印时候不显示关联字表信息,如
打印时候只显示users信息没有order信息,第一次创建搜索是可以显示的,退出应用后,再去查绚就没有字表信息了,导出db显示时存在user_id关联的。纠结了好久后来打印order信息,发现是存在的
所以放心使用。
坑四:
这完全是我不细心导致,
user_id是个随机数,下面order表应该也遍历赋值
ok,简单记录一下