首页 > 解决方案 > 如果存在则累积,否则在 Hibernate 中插入

问题描述

例如,假设我想使用 Hibernate 将我在不同月份的特定日期编写的代码行保存在 MySQL 数据库中。1 月 5 日,我写了 100 行代码。这一天我之前没有写任何代码行,所以它只是插入数据。

一年过去了,又是 1 月 5 日。我今天写了50行代码,我尝试将它插入到数据库中。第5天第1个月的ID已经存在,无法插入数据。在这种情况下,我希望它简单地将代码行添加到已经存在的行中,所以它现在说:

DAY.      MONTH.      LOC.
5.        1.          150.

我目前正在做的是,每次我想插入新数据时,我首先进行SELECT查询以检查该行是否已经存在。如果是,我创建一个UPDATE语句,否则我只创建一个INSERT语句。我正在处理大量数据,并注意到涉及我的数据库的操作开始需要很长时间。因此,我想知道是否有更好、更有效的方法来做到这一点?非常感谢您的帮助。谢谢你。

标签: mysqlsqlhibernatesql-updatesql-insert

解决方案


您似乎正在寻找update... on duplicate key语法。这看起来像:

insert into mytable(day, month, loc)
values(:day, :month, :loc)
on duplicate key update loc = loc + values(loc)

:day:month:loc表示您为 提供的参数insert

为此,您需要一个唯一约束(day, month)(或使该列元组成为表的主键)。

insert发生违反唯一约束的情况时,MySQL 会转到该on duplicate key子句,在该子句中我们将新loc值添加到现有行中已经存在的值中。


推荐阅读