Mon*_*eur 10 sqlite android foreign-keys greendao
当我创建如下所示的双向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);
Run Code Online (Sandbox Code Playgroud)
这是正常的吗?是应该在表中生成FOREIGN KEY(...)约束还是仅在运行时通过代码强制执行?
在处理项目时我遇到了同样的问题.
通过DaoGenerator生成的代码,即使使用ToMany关系也不会生成外键约束.
我尝试在每个实体DAO中的查询中手动附加外键约束,但它没有解决问题.
参考sqlite文档,我发现默认情况下不强制执行外键.您必须为PRAGMA foreign_keys = ON;创建到数据库的每个连接运行查询.我从adb shell验证了它.运行PRAGMA查询后强制执行外键.
最后一个问题是在项目中找到这个代码的位置,以便它将为每个会话执行.
解决方案是在DaoGenerator项目生成的DaoSession类中
插入
if(!db.isReadOnly()){
db.execSQL("PRAGMA foreign_keys = ON;");
}
Run Code Online (Sandbox Code Playgroud)
在构造函数的末尾.
不要忘记在具有外键属性的每个DAO的create table查询中手动添加外键约束.
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |