我在理解evict
和detach
之间的区别时遇到了一些麻烦,无论如何,evict
是否会分离 session ,如果有什么区别?我读到它从第二级缓存中删除了该对象,但没有得到它。
最佳答案
实际上,EntityManager.detach
和 hibernate 的Session.evict
都执行相同的thing:
从org.hibernate.Session
的 hibernate 实现中,我们可以看到detach
方法对evict
方法进行了内部调用。
public final class SessionImpl {
// ...
@Override
public void detach(Object entity) {
checkOpen();
try {
evict( entity );
}
catch (RuntimeException e) {
throw exceptionConverter.convert( e );
}
}
}