
entity customer = schema.addEntity("Customer");customer.addIDproperty();customer.addStringProperty("name").notNull();Entity order = schema.addEntity("Order");order.settablename("ORDERS"); // "ORDER" is a reserved keywordorder.addIDproperty();Property orderDate = order.addDateProperty("date").getproperty();Property customerID = order.addLongProperty("customerID").notNull().getproperty();order.addToOne(customer,customerID);customer.addToMany(order,customerID); 这是正常吗?是否应该在表中生成FOREIGN KEY(…)约束,还是仅在运行时通过代码强制执行?
解决方法 在一个项目工作期间,我被困在同一个问题上.通过DaoGenerator生成的代码,即使使用ToMany关系也不会产生外键限制.
我尝试在每个实体DAO中的查询中手动附加外键约束,但它并没有解决问题.
引用sqlite文档,我发现外键不是默认实现的.你必须运行查询PRAGMA foreign_keys = ON;为每个创建到数据库的连接.我从adb shell验证了它.运行PRAGMA查询后执行外键.
最后一个问题是在项目中为此代码找到一个地方,以便每个会话都执行该代码.
解决方案是由DaoGenerator项目生成的DaoSession类
插
if(!db.isReadonly()){ db.execsql("PRAGMA foreign_keys = ON;"); } 在构造函数的末尾.
不要忘记在具有外键属性的每个DAO的创建表查询中手动添加外键约束.
总结以上是内存溢出为你收集整理的android – greenDAO不会在表中生成FOREIGN KEY(…)约束全部内容,希望文章能够帮你解决android – greenDAO不会在表中生成FOREIGN KEY(…)约束所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)