jfinal 与MySQL

MySQLIntegrityConstraintViolationException: Duplicate entry '8' for key 'PRIMARY'

at com.jfinal.plugin.activerecord.Model.save(Model.java:570)

往mysql 中添加数据主键自增老报这个错

评论区

JFinal

2021-01-14 14:15

我估计你是用了 dao.save(....) 这种

代码贴全一些

joneJson

2021-01-14 14:21

baseIcon.setPictureName(iconInfo.getString("pictureName"));
baseIcon.setAttribute(iconInfo.getJSONArray("attribute").toJSONString());
baseIcon.setIcon(iconInfo.getString("icon"));
boolean result=baseIcon.save();
对就是用了save方法

joneJson

2021-01-14 14:22

怎么解决呢
第一次与mysql集成用jfinal

joneJson

2021-01-14 14:22

joneJson

2021-01-14 14:26

steven_lhcb_9527

2021-01-14 14:43

应该是冲突了吧,为啥主键要自增。现在不都是UUID吗

JFinal

2021-01-14 14:47

关键在于 baseIcon 这个对象内的 id 值是从何来的

如果你上次 baseIcon.save() 过了一次, 下次再给它的其它字段赋值,再 save() 的话,其中的 id 值还是用的上一次的,必定出错

JFinal

2021-01-14 14:47

你试一下这样:
baseIcon.remove("id").save();

joneJson

2021-01-14 14:54

我用这个一次性添加多个,是不是每次都要这样写

joneJson

2021-01-14 14:54

JFinal

2021-01-14 15:05

@joneJson 你的 baseIcon 对象,每次 new 出来就没事

我前面说的你试一试 baseIcon.remove("id").save(); 只是让你验证错误的原因,并不是主张你这么用

baseIcon 你要让线程独享,不能多线程共享,否则数据就会混乱,这是 java 多线程模型规定的,不是 jfinal 的使用规则

也就是说,这是 java 基础知识,jfinal 不干预

joneJson

2021-01-14 15:29

只有一个primary ,这个表

joneJson

2021-01-14 15:30

@JFinal 我直接用了 @Inject 的

JFinal

2021-01-14 15:53

@joneJson Model 是不能注入的,因为 @Inject 默认是单例, 你每次注入的是同一个对象,然后对同一个对象 xxx.save(), 必然出问题

且不说 id 重复,既便 id 不得复,在多线程情况下,数据就乱掉了

model 你要 save ,可以这样:
Icon icon = new Icon();
icon.setXxx(...)
.setYyyy(...)
.setZzz(...)
.save();

joneJson

2021-01-14 15:57

行我知道了

joneJson

2021-01-14 16:01

那删改查是不是删改查也要每次new 一个对象

joneJson

2021-01-14 16:01

JFinal

2021-01-14 16:08

@joneJson 下载 jfinal.com 首页的 demo, 项目结构都有了, 参考着写,啥事没有