gen
gen copied to clipboard
通过gorm-gen生成的代码,无法使用Sharding查询
这是我定义的分片配置
err := db.Use(sharding.Register(sharding.Config{
DoubleWrite: false,
ShardingKey: "userId",
NumberOfShards: num,
PrimaryKeyGenerator: 2,
}, model.Task{}))
然后我使用gorm-gen生成的查询方法进行查询,
//(这里的db也就是生成的Query)
db.Task.WithContext(ctx).Where(db.Task.UserID.Eq(userId)).Where(db.Task.ID.Eq(id), db.Task.DelFlag.Eq(0)).First()
我上面配置的是userId位shardingKey,这里也使用了这个条件,但是结果返回ErrMissingShardingKey错误。
我使用下面正常查询方式就可以
db.db.Model(m).Where("userId=? and id=? and delFlag=?", userId, int64(id), 0).First(m).Error
请问是我哪里有问题吗
@coderyw 加上debug 看看输出的sql,是否符合预期就好了
@coderyw 加上debug 看看输出的sql,是否符合预期就好了
看了,表名不对的。现在我的做法是手动分表,然后执行User.Table(name),copy出预期表名的userDao出来
我遇到了同样的问题,发现两种方式的SQL不一样,第一种就会分表失效
//第一种
u := query.UserTab
ctx := context.Background()
result, err := u.WithContext(ctx).Where(u.Username.Eq("user_2")).Find()
对应SQL:SELECT * FROM user_tab WHERE user_tab.username = ?
//第二种
DB.Model(&model.UserTab{}).Where("username", "user_2").Find(&tab2)
对应SQL:SELECT * FROM user_tab WHERE username = ?