java - hibernate内部如何判断对象是否处于分离状态

标签 java hibernate

我一直在四处寻找并寻找了解 hibernate 在内部如何确定对象是否分离的方法。试图查看 hibernate 代码,但无法弄清楚。在stackoverflow中看到过一些线程,但它们都讨论了我们如何在程序中确定一个对象是否分离。但是我想了解的是hibernate内部如何识别分离的对象。背后的算法是什么这个识别场景是哪个??

最佳答案

当然,如果实体是托管的(即附加到当前 session ,则它不会分离)。关键部分是区分 transient 实体(即不受管理的实体实例,并且数据库中尚不存在)和分离实体(即不受管理的实体,但应该已经存在于数据库中)数据库)。

确定实体是否分离或 transient 的算法的主要部分在 AbstractEntityPersister.isTransient() 中。

基本上,如果它具有空标识符或空乐观锁版本属性(即用 @Version 注释的属性),则它被视为 transient 。

还有其他微妙之处,但如果您使用自动生成的标识符,并且标识符不为空,那么 Hibernate 会将其视为独立实体。如果您使用分配的标识符,那么它需要检查数据库(除非您还有版本属性)。这是使用自动生成的标识符的另一个充分理由。

关于java - hibernate内部如何判断对象是否处于分离状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38189687/

相关文章:

java - 制作 Java EXE

java - 使用 Spring/Spring Boot 注册 Bean Validation ValueExtractor

java - 使用 JPA Criteria 查询 API 进行多对多示例

java - Hibernate session.flush() --> 如何只更新脏对象而不是所有内容?

java - 使用 hibernate 插入数据库但出现 java.lang.reflect.InitationTargetException 异常

java - 如何在 Java 中转换泛型?

java - 绘制在 Java GUI 中创建为实例的圆圈

java - Android TextView 中的 HTML 文本对齐方式

java - 使用 Android java 在 WhatsApp 上自动发送消息?

java - Hibernate 使用 transient 对象更新实体