当我创建如下所示的双向1:n关系时,生成器不会在表上使用任何FOREIGN KEY(…)约束.
entity customer = schema.addEntity("Customer"); customer.addIdProperty(); customer.addStringProperty("name").notNull(); Entity order = schema.addEntity("Order"); order.setTableName("ORDERS"); // "ORDER" is a reserved keyword order.addIdProperty(); Property orderDate = order.addDateProperty("date").getProperty(); Property customerId = order.addLongProperty("customerId").notNull().getProperty(); order.addToOne(customer,customerId); customer.addToMany(order,customerId);
解决方法
在一个项目工作期间,我被困在同一个问题上.
通过DaoGenerator生成的代码,即使使用ToMany关系也不会产生外键限制.
我尝试在每个实体DAO中的查询中手动附加外键约束,但它并没有解决问题.
引用sqlite文档,我发现外键不是默认实现的.你必须运行查询PRAGMA foreign_keys = ON;为每个创建到数据库的连接.我从adb shell验证了它.运行PRAGMA查询后执行外键.
最后一个问题是在项目中为此代码找到一个地方,以便每个会话都执行该代码.
解决方案是由DaoGenerator项目生成的DaoSession类
插
if(!db.isReadOnly()){ db.execsql("PRAGMA foreign_keys = ON;"); }
在构造函数的末尾.