Metrics
0
Watch 2.9K Star 6.1K Fork 3K

ThinkGem / JeeSite 4.xJavaAGPL-3.0

无法使用数据库自增,而且自带的id编号会引起并发错误

Open
fatuous-暴君  Created at

该问题是怎么引起的?

用一个for循环 调用 super.insert(); 方法,会报唯一key重复错误。使用的是4.1.5版本。
而且自己赋值key依然会被框架改掉,框架自己生成的key还有问题。最后只能临时自己重写xml解决。

重现步骤

用一个for循环 调用 super.insert(); 方法

报错信息

1492440_jeeweb 1165033_baojunkeji total 2 participants

Comments (3)

1492440_jeeweb
luming 2019-09-03 11:12

框架优先推荐UUID作为主键!
(1)因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其它系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的)。特别是在新系统上线时,新旧系统并行存在,并且是异库异构的数据库的情况下,需要双向同步时,自增主键将是你的噩梦;
(2)在系统集成或割接时,如果新旧系统主键不同是数字型就会导致修改主键数据类型,这也会导致其它有外键关联的表的修改,后果同样很严重;
(3)若系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个字符标识(例如“o”,old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。
(4)比如你是一个正在吹牛逼拉 C 轮投资的电商,处处造势,日订单量千万,会员三亿,然后被媒体公开,你家 UID 才到九百多万,昨天下单订单号跟今天订单号就差六十多万,完事你家得用多钱去公关这些恶劣影响

1165033_baojunkeji
fatuous-暴君 2019-09-03 21:50

@luming 不用自增这个了解了,就是发现一个问题。在本地测试的时候for循环insert是没问题的,打包了之后for循环insert这个UUID会重复。导致数据库报key重复问题,这个要怎么解决?

1492440_jeeweb
luming 2019-09-04 19:43

没有遇到过,你试试insertBatch

Sign in and comment

Assignee
Labels
Not set
Project
Milestone
Branch
Scheduled start
Not set
Scheduled end
Not set
Top level
Priority

Help Search