java - 找到重复的主键时替换行

标签 java mysql sql database hibernate

我有一个表,我希望在找到重复的主(唯一)键时替换其中的一行。

Create table History (
  id varchar(5) not null,
  name varcah(30),
  primary key (id)
) engine=InnoDB character set utf8;

我在 hibernate 中使用它。 id 列声明为 @Id @Column(name="id", unique=true, nullable=false)

帮我修改上面的 SQL,Hibernate 注释允许在发现重复的主键时进行替换

最佳答案

数据库主键不会被更新/替换。有变通办法,但这些都是不好的做法。

最好使用 AUTO INCREMENT(MySQL)、IDENTITY(MSSQL) 或 SEQUENCE(ORACLE, PostgreSQL) ID 生成。

如果您使用手动 ID 分配并且遇到重复的主键违规,则必须检查您当前的应用程序并发设计。手动分配 id 不是线程安全的吗?

数据库序列或 AUTO-INCREMENT ID 将使您避免重复的主键违规。

关于java - 找到重复的主键时替换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23671049/

相关文章:

java - Java String 和 StringBuffer 中处理文本的类之间的差异

php - 选择在带连字符的列名称上失败

sql - 如何为另一个属性的任何给定值选择具有最大值的属性的每个模型?

mysql - 显示 View sql 时出错

java - BIG O循环分析

java - 如何在Document DB java SDK中指定NONE分区键来删除文档?

java - JSP Servlet请求的资源()不可用

php - 我正在尝试生成 .sql 转储文件并使用 php 自动下载

php - Mysql FULL TEXT 搜索问题

sql - 保留子查询的顺序(使用 GROUP BY 和 ORDER BY)