【Qt】QxORM无法删除和更改主键值为0的行,否则报错:invalid primary key
1、问题描述
使用 QxORM 删除或者更改数据库时,当主键值为 0 时,报错:
[QxOrm] invalid primary key
2、原因分析
2.1 源码分析
查找打印错误提示的代码:
#define QX_DAO_ERR_INVALID_PRIMARY_KEY "[QxOrm] invalid primary key"
QSqlError IxDao_Helper::errInvalidId()
{ return updateError(QX_DAO_ERR_INVALID_PRIMARY_KEY); }
分别在以下的方法中检查 ID 值是否有效
deleteById
fetchById
update
检查 ID 值是否有效的方法
if (! dao.isValidPrimaryKey(t)) { return dao.errInvalidId(); }
2.2 主键无效的判定原则
跟踪 isValidPrimaryKey 方法,最后调用模板函数及特例 is_valid_primary_key,源码如下,可见,当主键值为 0 或者为 i