Hibernate 对使用load()获得的实体使用lock(LockModeType.OPTIMISTIC_FORCE_INCREMENT)是否有效?
我正在处理一个批量数据加载框架,它使用Hibernate 对使用load()获得的实体使用lock(LockModeType.OPTIMISTIC_FORCE_INCREMENT)是否有效?,hibernate,jpa,jpa-2.1,hibernate-5.x,hibernate-5,Hibernate,Jpa,Jpa 2.1,Hibernate 5.x,Hibernate 5,我正在处理一个批量数据加载框架,它使用load(…)来获取对我们已知存在的实体的引用,这些实体将作为要创建的实体的父实体(必须在多对一属性中为这些新子实体设置)。从未对父级进行过任何(其他)更改。它本质上是不可变的后期创建 这样做是为了减少抓取并优化性能。除此之外,该框架的引擎非常小心地进行操作,以支持大型、未中断的JDBC批处理。在大多数情况下(非常接近100%),这些“父母”不会在同一个会话中获取或创建,因此,加载(…)的结果,据我所知,将是一种空壳 为了便于正确的乐观锁定,每次获得新的子级
load(…)
来获取对我们已知存在的实体的引用,这些实体将作为要创建的实体的父实体(必须在多对一属性中为这些新子实体设置)。从未对父级进行过任何(其他)更改。它本质上是不可变的后期创建
这样做是为了减少抓取并优化性能。除此之外,该框架的引擎非常小心地进行操作,以支持大型、未中断的JDBC批处理。在大多数情况下(非常接近100%),这些“父母”不会在同一个会话中获取或创建,因此,加载(…)
的结果,据我所知,将是一种空壳
为了便于正确的乐观锁定,每次获得新的子级(或将其删除)时,都需要增加父级的版本。这可以使用lock(parent,LockModeType.OPTIMISTIC\u FORCE\u INCREMENT)
方法完成。我想了解在这种情况下,这里实际会/需要发生什么
需要读取/获取父版本,以便于以后进行比较。但是,这可能比实际获取父级更便宜,也更优化。我想到的一些事情是,Hibernate可以大量读取这些版本,而不是逐个加载它们,甚至比实际获取的父实体更高效地存储/处理它们。以后的比较和增量也可以类似地进行优化。这是很多“可能”。。。但是会发生什么呢
有人能澄清一下吗?谢谢 附加细节:我们使用字节码增强和字段访问,如果这改变了什么。