为什么detached状态下,session.delete()能找到并删除已经分离的数据库中要删的数据?
先session.save( t );再session.close()成detached状态。然后创建个新的session2,再session2.delete(t);
明明是detached状态,而且session已经关闭了,为什么hibernate还知道内存中的 t 和数据库中的列有关系。session和数据库不是已经关闭和脱离了吗?为什么hibernate还能准确的知道这个t对象就是对应数据库中的某个数据?
hibernate会维护主键和对象的关系,而主键在数据库中是唯一的,所以能跟踪对象。
首先hibernate映射的数据库表必须注明主键一般是id,你删除t的时候hibernate会反射去拿到t对象的主键id然后根据这个主键去数据库删除对象。好像还有一个直接根据主键删除对象的方法。
你删除t的时候hibernate会反射去拿到t对象的主键id然后根据这个主键去数据库删除对象