You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何获取刚插入数据库的自动生成ID?

获取自动生成的主键并插入中间表解决方案

嘿,我来帮你搞定这个问题!你现在的需求很明确:在成功插入transactions表后拿到自动生成的COT_Id,再用这个ID去插中间表USER_TRANS对吧?根据Java项目里常用的持久层框架,这里有几种简单可行的方法:

情况1:用Spring Data JPA/JPA(最常见的Spring项目场景)

如果你的Transaction实体类是用JPA注解定义的(比如带@Entity),而且COT_Id字段用了@GeneratedValue来配置自动生成策略(比如IDENTITY对应数据库自增),那事情就很简单了:

当你调用transactionService.saveTrans(transaccion)之后,JPA会自动把数据库生成的主键值回写到你传入的transaccion对象里。你直接调用对应的getter方法就能拿到ID:

if(resultado) {
    transactionService.saveTrans(transaccion);
    // 直接从保存后的实体获取自动生成的ID
    Long transId = transaccion.getCot_Id(); // 注意类型要和你的实体字段匹配,比如Integer或者Long
    generalService.saveUserTrans(udID, transId, 1);
}

另外,如果你用的是Spring Data JPA的CrudRepository,save方法本身会返回保存后的实体对象,你也可以用返回的对象来拿ID,这样更稳妥:

if(resultado) {
    Transaction savedTransaction = transactionService.saveTrans(transaccion);
    Long transId = savedTransaction.getCot_Id();
    generalService.saveUserTrans(udID, transId, 1);
}

注意:确保你的Transaction实体类里cot_Id字段的getter方法(比如getCot_Id())是正确定义的,不然没法获取到值哦

情况2:用MyBatis

如果你的项目用的是MyBatis,那需要在Mapper的插入配置里开启返回自增主键的功能:

  1. 在Mapper接口的插入方法上可以加注解:
@Insert("INSERT INTO transactions (mvg_id, crd_id, cot_amount, ...) VALUES (#{mvg_id}, #{crd_id}, #{cot_amount}, ...)")
@Options(useGeneratedKeys = true, keyProperty = "cot_Id")
void saveTrans(Transaction transaccion);

或者在XML映射文件里配置:

<insert id="saveTrans" parameterType="Transaction" useGeneratedKeys="true" keyProperty="cot_Id">
    INSERT INTO transactions (mvg_id, crd_id, cot_amount, ...) VALUES (#{mvg_id}, #{crd_id}, #{cot_amount}, ...)
</insert>

配置完成后,调用saveTrans方法传入transaccion对象,MyBatis会自动把生成的COT_Id填充到对象的cot_Id字段里,之后你同样可以用transaccion.getCot_Id()拿到ID去插中间表。

额外提醒

不管用哪种框架,核心思路都是让持久层框架在插入后把生成的主键回写到实体对象,这样就不用自己去执行额外的查询(比如SELECT 859264),既高效又避免并发问题。

内容的提问来源于stack exchange,提问作者Eli HQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:23:17