GBase 8a
其他
问答

表字段设置为自增字段类型(AUTO_INCREMENT),但java端死活获取不到这个 自增字段值

发表于2026-08-21 19:53:28248次浏览9个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】: gbase8a

【操作系统】: windows 10

【CPU】: i7

【问题描述】*:

"id" bigint(20) NOT NULL AUTO_INCREMENT COMMENT '模型ID', 表字段定义为 自增

@Transactional(value = "xxxxManager", rollbackFor = Exception.class)
mapper.insert(entity);

Long xxId = entity.getId(); ---这里死活获取不到值

 

豆包说加个Interceptor 拦截器

insert into xx(model_name) values('test_multi'); select LAST_INSERT_ID() as id;   

 

PreparedStatement multiStatement = connection.prepareStatement(multiSql)  ---在一个connection执行,也不行

 

 

悬赏:20吉币
回答被发帖人采纳后可获得赏金

评论

登录后才可以发表评论
用户头像
郝老师发表于 1个月前
ORM用的是哪个?
用户头像
GBase用户28017发表于 1个月前
难道还能赖上ORM了?
GBase用户51829发表于 1个月前
怎么解决的。分享下呗
用户头像
GBase用户28017发表于 1个月前
你应该COMMIT吧。不COMMIT还没有直接关联到数据库,所以没有ID?
小熊发表于 1个月前
在GBase 8a集群中,当使用JDBC的 getGeneratedKeys() 方法获取自增ID时,集群返回的信息中自增ID值一直是0,而非实际生成的标识。这是因为集群在插入成功时没有更新变量 first_successfull_insert_id_in_curr_stmt ,导致返回的ID为0。
解决办法:
1、升级集群版本(推荐)
该问题已在后续版本中修复,建议升级到包含修复的版本。修复方法是在commit成功时更新变量 first_successfull_insert_id_in_curr_stmt 。
2、使用 SELECT LAST_INSERT_ID() 主动获取
如果暂时无法升级,可以在insert操作后主动执行查询获取自增ID:
// 插入数据
stmt.executeUpdate("INSERT INTO autoIncTutorial (dataField) " +
"values ('Can I Get the Auto Increment Field?')");

// 主动查询自增ID
ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
if (rs.next()) {
int autoIncKey = rs.getInt(1);
System.out.println("获取到的自增ID: " + autoIncKey);
}
sherq1989发表于 1个月前
@小熊:推荐
用户头像
GBase用户28017发表于 1个月前
我试验了一下,可以返回。你最好贴出全部的类。
用户头像
GBase用户28017发表于 1个月前
还没有解决吗?如果用的MyBatis,在实体操作 Mapper接口上,有没有添加@Options(useGeneratedKeys = true, keyProperty = "id")这个标注。
用户头像
GBase用户28017发表于 1个月前
还没解决吗?给个邮箱,发你我的源码。