我在理解evictdetach之间的区别时遇到了一些麻烦,无论如何,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 );
        }
    }
}

10-08 18:47