想请教一下 Java 远程调用其他服务执行保存,如何通过实体类拿到自增 id? - V2EX
godleon
V2EX    Java

想请教一下 Java 远程调用其他服务执行保存,如何通过实体类拿到自增 id?

  •  
  •   godleon Mar 15, 2023 1825 views
    This topic created in 1154 days ago, the information mentioned may be changed or developed.

    需求

    A 服务里,一个方法

    public void demo(){ //Person 对应 mysql 表 Person person = new Person(); person.setName("demo"); //远程调用 B 服务执行事务 remoteB.savePerson(person); //保存成功之后如何直接拿到 id ? person.getId(); } class Person(){ //自增主键 int id; String name; } 
    8 replies    2023-03-16 09:45:47 +08:00
    cslive
        1
    cslive  
       Mar 15, 2023
    B 服务不返回 id ,你是拿不到的
    godleon
        2
    godleon  
    OP
       Mar 15, 2023
    @cslive 就是想看看有没有办法实现出来类似于 在 mybatis 中 mapper 里增加 keyProperty=id ,useGeneratedKeys=true 可以赋值到实体类的自增主键上,但是这个好像只能在单服务里玩,远程调用就不行了
    urnoob
        3
    urnoob  
       Mar 15, 2023
    远程 B 返回 id ,自己的底层代码里 set 进去
    zhangqian99
        4
    zhangqian99  
       Mar 15, 2023
    你再查一下不就行了
    wentz
        5
    wentz  
       Mar 15, 2023
    写到 redis
    summerLast
        6
    summerLast  
       Mar 15, 2023
    remoteB

    void savePerson(person) {
    String id = bClient.post(persion)
    persion.setId(id)
    }
    xuanbg
        7
    xuanbg  
       Mar 15, 2023
    有两种办法,第一种就是 B 服务接口返回 ID 。另一种方法是改成雪花 ID ,你生成好赋值 id 一起传过去。B 服务直接保存数据不再生成 ID 。我一般两种都支持,B 服务不但有接口,也可以通过 MQ 来同步数据。
    nothingistrue
        8
    nothingistrue  
       Mar 16, 2023
    Save 之后,实体类的 id 被更新为数据库中实际添加的自增 ID ,这其实是一种维持实体类跟数据库中的记录同步的措施。完整的措施,是要对实体类做会话跟踪的,这样才能保证,最起码当前会话中,实体类对象根数据库表中的记录,是完全同步的。

    远程调用,也能做会话跟踪,不过跟踪的设计难度和实施成本,太高了。如果只是要获取数据库实际添加的自增 ID ,相比于跟踪实体类并从 save 后的实体类获取,从 save 方法的返回值获取,更具备可取性。也就是 3 楼的方法。
    About     Help     Advertise     Blog     API     FAQ     Solana     3221 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 52ms UTC 14:24 PVG 22:24 LAX 07:24 JFK 10:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86