Hibernate-reactive: session.remove && session.getReference

创建于 2020-09-07  ·  3评论  ·  资料来源: hibernate/hibernate-reactive

您好,据我了解,在 jpa 之后,只有一种方法可以删除分离的实体:

factory.withTransaction((session, transaction) -> 
    session.merge(sampleEntity).invokeUni(session::remove)
).await().indefinitely();

一切都很好,但如果是关于性能,合并操作会花费大量时间并且会导致真正的性能问题。 例如,根据我不准确的时间测量,删除 5000 个实体需要大约 4 秒,而在 hibernate-orm 中需要 50 毫秒。

我刚刚阅读了一个名为session.getReference的新方法,它返回给定实体的持久实例。 是否可以允许将其用于session.remove

所有3条评论

我刚刚阅读了一个名为session.getReference的新方法,它返回给定实体的持久实例。 是否可以允许将其用于session.remove

啊,好点,绝对你应该能够做到这一点。 我已经让它在#360 中工作了。

但是,我想让您明白,如果不先获取对象,就无法remove()获取它。 这是因为remove()具有级联删除和集合删除等语义,这取决于会话中实体的状态。

如果您绝对需要能够在不获取实体的情况下删除实体,则应使用StatelessSession.delete()或 HQL delete查询。

@Xset-s PS 感谢您报告此事,这对我来说是一个很大的疏忽

没问题,感谢您对删除操作的详细回复和快速修复。 我现在正在进行实验并使用你的新库重写我的服务器端应用程序,所以我很容易发现一些棘手的问题,只能这样(或使用大量测试😄)

此页面是否有帮助?
0 / 5 - 0 等级