我一直在四处寻找以了解休眠是如何在内部确定对象是否分离的。试图查看休眠代码,但无法弄清楚。我已经看到了stackoverflow中的一些线程,但是所有人都在谈论我们如何确定程序中是否分离了一个对象,但是我想了解的是休眠是如何在内部识别分离的对象的。这个场景是哪个识别的?
最佳答案
当然,如果实体是受管理的(即已附加到当前会话,则不会分离)。关键部分是要区分瞬态(即,尚未管理的实体实例,但尚未在数据库中存在的实体实例)与分离的实体(即,尚未管理但应已存在的实体实例)之间的区别数据库)。
确定实体是分离的还是瞬态的算法的主要部分在AbstractEntityPersister.isTransient()
中。
基本上,如果它具有空标识符或空锁版本属性(即以@Version
注释的属性),则将其视为瞬态。
还有其他一些细微之处,但是如果您使用自动生成的标识符,并且标识符不为null,则Hibernate会将其视为独立实体。如果使用分配的标识符,则它需要检查数据库(除非您也具有版本属性)。这是使用自动生成的标识符的另一个很好的理由。
关于java - hibernate 如何在内部确定对象是否处于分离状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38189687/