【问题标题】:Replace row when duplicate primarykey found发现重复主键时替换行
【发布时间】:2014-07-03 11:25:58
【问题描述】:

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

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

我将它与休眠一起使用。 id 列声明为@Id @Column(name="id", unique=true, nullable=false)

帮我改一下上面的SQL,Hibernate annotations to allow REPLACE on duplicate primary key is found

【问题讨论】:

  • 为什么不直接调用Hibernate更新方法呢?这就是它的设计目的。 sessionFactory().getCurrentSession().update(object);
  • saveOrUpdate 是我需要的
  • 我是这么认为的,你的问题本身没有意义

标签: java mysql sql database hibernate


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2014-06-25
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多