注册

JPA+Hibernate获取自增主键错误

尼克斯 2025/03/10 201 0

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM Database Server 64 V8
【操作系统】:Kylin Linux Advanced Server V10 (Sword)
【CPU】:
【问题描述】*:Intel(R) Xeon(R) CPU E5-2678 v3 @ 2.50GHz

在一个事务内,JPA先保存对象:

2025-03-10T08:25:22.275679945Z Hibernate: 
2025-03-10T08:25:22.275687102Z     insert 
2025-03-10T08:25:22.275693925Z     into
2025-03-10T08:25:22.275700695Z         department
2025-03-10T08:25:22.275707642Z         (creator, gmt_create, gmt_modified, mender, abbreviation, chain_id, code, company_id, conference_chain_id, coverage_id, dept_desc, dept_name, dept_rank, ds_priority, ldap_guid, mcu_template_id, parent_id, source, storage_size, vc_functional, vc_special) 
2025-03-10T08:25:22.275715502Z     values
2025-03-10T08:25:22.275722335Z         (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2025-03-10T08:25:22.299635444Z 2025-03-10 16:25:22:298 - [DEBUG] - http-nio-10021-exec-5 - org.hibernate.id.IdentifierGeneratorHelper - Natively generated identity: 961

注意到日志中获取的自增主键是961,实际上应该在200左右,从这里开始应该就不对了,然后修改该对象

2025-03-10T08:25:22.337834837Z Hibernate: 
2025-03-10T08:25:22.337841510Z     update
2025-03-10T08:25:22.337851630Z         department 
2025-03-10T08:25:22.337874437Z     set
2025-03-10T08:25:22.337881697Z         gmt_modified=?,
2025-03-10T08:25:22.337888464Z         mender=?,
2025-03-10T08:25:22.337895187Z         abbreviation=?,
2025-03-10T08:25:22.337908540Z         chain_id=?,
2025-03-10T08:25:22.337938347Z         code=?,
2025-03-10T08:25:22.337945497Z         company_id=?,
2025-03-10T08:25:22.337952137Z         conference_chain_id=?,
2025-03-10T08:25:22.337958904Z         coverage_id=?,
2025-03-10T08:25:22.337965967Z         dept_desc=?,
2025-03-10T08:25:22.337973287Z         dept_name=?,
2025-03-10T08:25:22.337980031Z         dept_rank=?,
2025-03-10T08:25:22.337986831Z         ds_priority=?,
2025-03-10T08:25:22.337993544Z         ldap_guid=?,
2025-03-10T08:25:22.338000311Z         mcu_template_id=?,
2025-03-10T08:25:22.338011304Z         parent_id=?,
2025-03-10T08:25:22.338018208Z         source=?,
2025-03-10T08:25:22.338030441Z         storage_size=?,
2025-03-10T08:25:22.338038261Z         vc_functional=?,
2025-03-10T08:25:22.338045198Z         vc_special=? 
2025-03-10T08:25:22.338052281Z     where
2025-03-10T08:25:22.338058998Z         id=?
2025-03-10T08:25:22.342597557Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Mon Mar 10 16:25:22 CST 2025]
2025-03-10T08:25:22.342625380Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [nix]
2025-03-10T08:25:22.342635010Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - []
2025-03-10T08:25:22.342642754Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BIGINT] - [null]
2025-03-10T08:25:22.342650290Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [VARCHAR] - []
2025-03-10T08:25:22.342657694Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [BIGINT] - [189]
2025-03-10T08:25:22.342665474Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [BIGINT] - [null]
2025-03-10T08:25:22.342682121Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [BIGINT] - [null]
2025-03-10T08:25:22.342689647Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [VARCHAR] - []
2025-03-10T08:25:22.342697017Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [二级子公司]
2025-03-10T08:25:22.342705554Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [VARCHAR] - []
2025-03-10T08:25:22.342712901Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [INTEGER] - [null]
2025-03-10T08:25:22.342720294Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [VARCHAR] - [null]
2025-03-10T08:25:22.342729061Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [BIGINT] - [null]
2025-03-10T08:25:22.342736517Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [BIGINT] - [189]
2025-03-10T08:25:22.342743798Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [BIGINT] - [null]
2025-03-10T08:25:22.342758831Z 2025-03-10 16:25:22:341 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [BIGINT] - [-1]
2025-03-10T08:25:22.342767514Z 2025-03-10 16:25:22:342 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [BOOLEAN] - [false]
2025-03-10T08:25:22.342775021Z 2025-03-10 16:25:22:342 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [BOOLEAN] - [false]
2025-03-10T08:25:22.342782414Z 2025-03-10 16:25:22:342 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [BIGINT] - [961]

最后SELECT语句查询961时,报错:

2025-03-10T08:25:22.350636417Z 2025-03-10 16:25:22:349 - [TRACE] - http-nio-10021-exec-5 - org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [BIGINT] - [961]
2025-03-10T08:25:22.357548860Z 2025-03-10 16:25:22:351 - [WARN ] - http-nio-10021-exec-5 - org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Warning Code: 100, SQLState: 02000
2025-03-10T08:25:22.357589453Z 2025-03-10 16:25:22:351 - [WARN ] - http-nio-10021-exec-5 - org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Empty result

事务提交时,JPA报错:

2025-03-10T08:25:22.367809390Z Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [com.potevio.dss2.ms.oauth.entity.Department#961]

连接参数如下:

zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&compatible_mode=mysql

JPA配置如下:

  jpa:
    database-platform: "org.hibernate.dialect.DmDialect"
    show-sql: true
    open-in-view: false
    hibernate:
      use-new-id-generator-mappings: false
    properties:
      javax:
        persistence:
          sharedCache:
            mode: ENABLE_SELECTIVE
      hibernate:
        id:
          new_generator_mappings: false
        use_jdbc_metadata_defaults: false
        enable_lazy_load_no_trans: true
        format_sql: true
        connection:
          provider_disables_autocommit: false
        order_inserts: true
        order_updates: true
        query:
          fail_on_pagination_over_collection_fetch: true
          in_clause_parameter_padding: true
        show_sql: true
        dialect: org.hibernate.dialect.DmDialect

去掉事务内更新操作后,发现JPA获取的主键ID与提交后实际生效的不一致,JPA获取的是961,实际提交后是199。

2025-03-10T09:19:09.875520093Z 2025-03-10 17:19:09:874 - [DEBUG] - http-nio-10021-exec-9 - org.hibernate.id.IdentifierGeneratorHelper - Natively generated identity: 961

image.png

回答 0
暂无回答
扫一扫
联系客服