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

如何在mybatis和postgresql中更新记录忽略id

万俟棋
2023-03-14

现在我用mybatis更新PostgreSQL 13记录,我想用user id更新用户表中的apple purchase prouct id,这是我的代码

Users users = new Users();
users.setId(payTransactionRecord.getUserId());
users.setAppleIapProductId(productId);

我给出了用户实体id和产品id,通过使用用户id更新产品id。这是使用mybatis的更新执行代码:

public int updateByPrimaryKey(Users user) {
        UsersExample example = new UsersExample();
        UsersExample.Criteria criteria = example.createCriteria();
        criteria.andIdEqualTo(user.getId());
        return userMapper.updateByExampleSelective(user,example);
    }

但是mybatis遗传sql会导致这样的错误:

Caused by: org.springframework.jdbc.BadSqlGrammarException: 
### Error updating database.  Cause: org.postgresql.util.PSQLException: ERROR: column "id" can only be updated to DEFAULT
  Detail: Column "id" is an identity column defined as GENERATED ALWAYS.
### The error may exist in class path resource [mybatis/mapper/dolphin/UsersMapper.xml]
### The error may involve com.dolphin.soa.post.dao.UsersMapper.updateByExampleSelective-Inline
### The error occurred while setting parameters
### SQL: UPDATE users SET id = ?, apple_iap_product_id = ? WHERE (id = ?)
### Cause: org.postgresql.util.PSQLException: ERROR: column "id" can only be updated to DEFAULT
  Detail: Column "id" is an identity column defined as GENERATED ALWAYS.
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR: column "id" can only be updated to DEFAULT
  Detail: Column "id" is an identity column defined as GENERATED ALWAYS.

我该怎么做才能修好它?

共有1个答案

晏炳
2023-03-14

SQL语句定义错误。您声明,您只想更新用户条目的苹果购买产品ID。但是在该语句中,它还试图更新用户条目本身的ID。错误消息指出总是生成其值,因此不允许手动更新users ID列中的值。尝试从SET部分删除ID,只在WHERE部分应用它。

 类似资料:
  • 我有一个名为employee_Details列的表名称 我使用Java构建JSON数组。具有结构 {[“EMP\u ID”:1,“NAME”:Y,“VECH\u NO”:4587,“SALARY”:1500),“EMP\u ID”:3,“NAME”:Z,“VECH\u NO”:4007,“SALARY”:1800]} 我需要更新表上EMP\U ID存在的完整记录,否则将作为新记录插入。postgr

  • 问题内容: 以下代码是从文档中复制的。我应该能够查看所有信息日志。但是我没有。即使将setLevel设置为INFO,我也只能看到警告和以上内容。 为什么会这样呢?: 输出: 信息和调试消息到哪里去了? 问题答案: 更换线 与 它应该可以按预期工作。如果您不使用任何处理程序来配置日志记录(如您的帖子中所示,您只为记录器配置一个级别,但在任何地方都没有处理程序),则将获得一个“不得已使用”的内部处理程

  • 我目前使用JOOQ的可更新记录如下模式插入: 在,我希望使用数据库中的值更新,例如,如果表具有自动递增的列,将返回其值。 如果列具有唯一约束,则当违反该约束时,将抛出。我的问题是可以告诉JOOQ不要抛出异常,但仍然用现有的值更新记录吗?

  • 我使用的是Spring r2dbc和ReactiveCrudRepository,我有一个在生成更新查询时需要忽略的字段 如何在更新查询中忽略companyName。我可以在使用@列的插入查询中忽略它,但它不适用于更新

  • 本文向大家介绍如何仅显示MongoDB中的唯一记录,而忽略重复记录?,包括了如何仅显示MongoDB中的唯一记录,而忽略重复记录?的使用技巧和注意事项,需要的朋友参考一下 要仅显示唯一记录,请在MongoDB中使用distinct()。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是获取唯一记录的查询- 这将产生以下输出-

  • 我有一个名为“user_links”的PostgreSQL数据库表,该表当前允许以下重复字段: 唯一约束当前是第一个名为“id”的字段,但是我现在希望添加一个约束,以确保、、和都是唯一的,但我无法应用约束,因为已经存在违反此约束的重复值。 有没有找到所有重复的方法?