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);
}
解决办法:
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个月前
还没解决吗?给个邮箱,发你我的源码。
热门帖子
- 12025-12-01浏览数:183763
- 22023-05-09浏览数:26460
- 42023-09-25浏览数:20126
- 52020-05-11浏览数:18856