当前位置: 首页 > 知识库问答 >
问题:

将主键更新为UUID的记录在Spring Boot中不起作用

广亮
2023-03-14

我使用Spring Boot V1.5.3.Release和MYSQL作为创建Restful服务的后端。

我有一个TransactionBL表,希望它的主键是uuid类型,因为我认为该表中会有很多记录。

@Id
@GenericGenerator(name = "uuid",strategy = "org.hibernate.id.UUIDGenerator",
    parameters={ @Parameter (name = "uuid_gen_strategy_class",
    value = "org.hibernate.id.uuid.CustomVersionOneStrategy") })
@GeneratedValue(generator =  "uuid")
@Column(name="txn_id")
private UUID txnId;
 txnObj = txnService.findOne(txnObj.getTxnId());
 txnObj.setAmt(someUpdatedAmountValue);
 txnService.save(txnObj);

当我尝试用@id@generatedvalue(strategy=generationtype.auto)将主键从uuid切换到long时,它正按预期工作。

我是否以错误的方式定义了UUID,或者如果我们使用UUID生成,这样的更新将不起作用?

共有1个答案

浦修文
2023-03-14
**@Type(type = "uuid-char")**
@Column(name="txn_id")
private UUID txnId;

正常的UUID生成在数据库中创建具有Binary类型的列。在生成UUID的同时指定如上所示的类型将解决这个问题,因为在添加类型注释后,它将把列类型更改为Varchar

 类似资料:
  • 我刚到Spring 我尝试使用spring rest api和Hibernate更新Mysql中的一个现有值。但它每次都会抛出一个错误。 错误消息:

  • 表模式 用户模型 下面是我在Laravel 5中的代码 错误消息 SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“user.id”(SQL:select*fromwhere=1限制1)

  • 我最近在我的数据库中添加了一个新的迁移,它以最简单的形式执行如下操作 根据SE上的回答,Laravel应该自动为我创建并更新last_record列,但我正在MySQL 5.7中对此进行测试。这对我来说绝对不是。我使用的是Laravel7.5,我的PHP版本是7.3。21 同时,手动将更新当前时间戳时的添加到我的数据库也失败了。所以,这似乎是我的MySQL数据库而不是Laravel本身的问题。因此

  • 我正在使用jOOQ为我的数据库表生成POJO。这很有效。 我有一个带有主键()和唯一键()的表。更新记录时,jOOQ使用主键。 我想通过使用唯一键而不是主键来更新记录。 https://github.com/jOOQ/jOOQ/blob/master/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java 本质上,我想用另一个键(第二个参

  • 我想转换我的PostgreSQL表主键UUID字符变化 当我运行上面显示以下错误的命令时,Beacause外键约束失败。在我的系统中有200张桌子。有没有简单的方法来更改所有表的主键?

  • 我有一个用户表,ID列作为主键。我有这个功能在控制器: 此函数不回显任何内容。如果我从$id更改为$name,如下所示: