gpt4 book ai didi

android - greenDAO 不在表中生成 FOREIGN KEY(...) 约束

转载 作者:IT王子 更新时间:2023-10-29 06:20:55 26 4
gpt4 key购买 nike

当我创建如下所示的双向 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);

这正常吗?它应该在表中生成 FOREIGN KEY(...) 约束还是仅在运行时通过代码强制执行?

最佳答案

我在做一个项目时遇到了同样的问题。

通过 DaoGenerator 生成的代码,即使使用 ToMany 关系也不会生成外键约束。

我尝试在每个实体 DAO 的查询中手动附加外键约束,但它并没有解决问题。

引用sqlite文档,我发现默认情况下不强制执行外键。您必须为每个创建到数据库的连接运行查询 PRAGMA foreign_keys = ON;。我从 adb shell 验证了它。运行 PRAGMA 查询后强制执行外键。

最后一个问题是在项目中为这段代码找到一个位置,以便它在每个 session 中执行。

解决方案在DaoGenerator项目生成的DaoSession类中

插入

 if(!db.isReadOnly()){
db.execSQL("PRAGMA foreign_keys = ON;");
}

在构造函数的末尾。

不要忘记在为每个具有外键属性的 DAO 的创建表查询中手动添加外键约束。

关于android - greenDAO 不在表中生成 FOREIGN KEY(...) 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21374300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com