标题Hibernate的merge方法的原理网上已经有很多篇文章介绍了:
执行merge后,如果传入的对象有ID,merge会先去数据库通过ID查,若查到则改,若查不到则增。
也就是说,相比直接insert或是update,用merge的实现会多一条selete语句
默认的查询语句格式大概是这样,带有强烈的Hibernate特色:
SELECT
student0_.s_id AS trace1_41_0_,
student0_.s_name AS task2_41_0_,
student0_.s_birth AS user3_41_0_,
student0_.s_sex AS trace4_41_0_,
FROM
student student0_
WHERE
student0_.s_id = 1
工作中有个业务会向表里插入大批量的数据,以前的老前辈封装的工具类是用Hibernate的merge方法来实现的,边查边插,差点给数据库干挂了。
要入库的数据都是经过了处理的,主键由雪花策略生成,所以不会有主键重复的风险,基于这个,我们在之后将底层的merge()换成了save(),问题解决。