找到重复的主键时替换行

时间:2014-05-15 06:44:58

标签: 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注释允许在重复的主键上找到REPLACE

1 个答案:

答案 0 :(得分:1)

数据库主键无意更新/替换。有一些解决方法,但这些都是不好的做法。

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

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

数据库序列或AUTO-INCREMENT ID将使您免于获得重复的主键冲突。