jpa update 和 delete 之前都会 select 一次 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kqq19930511
V2EX    Java

jpa update 和 delete 之前都会 select 一次

  •  
  •   kqq19930511 2022 年 9 月 16 日 2254 次点击
    这是一个创建于 1318 天前的主题,其中的信息可能已经有所发展或是发生改变。

    jpa update 和 delete 之前都会 select 一次,发现 querydsl 挺直接的没这个问题,大家分析一下有必要吗? 如果没有这个对象就会抛出对应的 exception

    4 条回复    2022-09-16 13:09:35 +08:00
    Kontinue
        1
    Kontinue  
       2022 年 9 月 16 日
    dirty check 吧,好像可关掉的
    qinxi
        2
    qinxi  
       2022 年 9 月 16 日
    select 的出处: org.springframework.data.jpa.repository.support.SimpleJpaRepository#deleteById

    为什么要 select: https://stackoverflow.com/questions/13210638/hibernate-delete-query/13240979#13240979
    timethinker
        3
    timethinker  
       2022 年 9 月 16 日
    这是因为框架机制的原因导致的,Hibernate 使用了一种被称之为工作单元模式( Unit of Work ),与数据库的事务进行对应,这样就会对实体的状态进行追踪,在这种机制下就会产生一个问题:如果没有这条数据,会发生什么?程序无法推测你的意图,有的场景下当数据不存在会导致一致性问题,也有的场景下存在“不关心有没有这条数据,如果有的话就删掉”这种逻辑。后者更偏向于面向数据库编程的过程式逻辑。

    这种工作机制不适合用于进行批量处理的场景,它更适合用于处理一些小范围的 OLTP 业务,带来的好处也是明显的,一级缓存避免了在接下来的事务范围中对同一个实体进行重复查询,也不需要显式的调用底层的数据操作,你只需要简单的查询对象,修改对象,在工作单元结束时(提交事务),它会根据对象现在的状态自动调用底层的数据操作,执行对应的 SQL 语句。

    所以很多人用 JPA 会觉得很别扭,本质上是因为思考的方式跟它的工作机制存在差异,理解工具的处理机制是很重要的,因为这样才能让你更好的使用它。如果你写代码的逻辑思维处于那种过程式的增删改查,那么 MyBatis 或许更简单直观。

    我个人认为,Hibernate 与 MyBatis 之间,不存在哪一个工具更好的这种说法,完全取决于你编写代码的模式,选一种你认为适合当下的工具就行,使用工具的目的是为了提升效率,仅此而已。
    kqq19930511
        4
    kqq1993051  
    OP
       2022 年 9 月 16 日
    @timethinker 是的,不纠结了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2646 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 10:21 PVG 18:21 LAX 03:21 JFK 06:21
    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