You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QxOrm中为多列添加联合唯一约束?

在QxOrm中实现多列联合唯一约束的方法

QxOrm本身没有提供直接设置联合唯一约束的内置API,但可以通过以下两种可靠方式实现需求:

方法一:手动执行自定义建表SQL

禁用QxOrm的自动建表逻辑,直接编写包含联合唯一约束的SQL语句创建表:

// 关闭QxOrm自动建表策略
qx::QxSqlDatabase::getSingleton()->setCreateTableStrategy(qx::create_table::none);

// 执行自定义建表SQL,添加联合唯一约束
QSqlQuery query(qx::QxSqlDatabase::getSingleton()->getDatabase());
QString createTableSql = R"(
CREATE TABLE IF NOT EXISTS clazz (
    id BIGINT PRIMARY KEY NOT NULL,
    name VARCHAR(255) NOT NULL,
    packageName VARCHAR(255) NOT NULL,
    desc TEXT,
    UNIQUE(name, packageName)
);
)";
query.exec(createTableSql);

方法二:利用QxOrm的自定义SQL扩展

在实体类的映射注册代码中,通过setCustomSqlCreateTableEnd方法注入联合唯一约束片段,让QxOrm自动建表时带上约束:

#include "clazz.h"
#include <QxOrm/QxOrm.h>

QX_REGISTER_CPP(clazz)

namespace qx {
template <> void register_class(QxClass<clazz> & t)
{
    // 注册主键与字段
    t.id(&clazz::id, "id");
    t.data(&clazz::name, "name").setNotNull(true);
    t.data(&clazz::packageName, "packageName").setNotNull(true);
    t.data(&clazz::desc, "desc");

    // 注入联合唯一约束到建表语句末尾
    QString uniqueConstraint = "CONSTRAINT unique_name_package UNIQUE(name, packageName)";
    t.setCustomSqlCreateTableEnd(uniqueConstraint);
}
} // namespace qx

注意:第二种方法依赖QxOrm版本,若使用较旧版本不支持setCustomSqlCreateTableEnd方法,优先选择第一种手动执行SQL的方案。

内容的提问来源于stack exchange,提问作者Shaobin Qian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 17:05:58