hibernate如何从缓存中获取peristent对象(1/2)
HibernateAPI如何第二次从缓存第1级和第2级获取持久对象 我知道,第一个请求从数据库中获取,并给出持久对象,如果启用,还将其放入一级缓存和二级缓存 当我第二次查询它将如何从缓存中提取时?加载和获取将如何获取 另外,equals、hashcode在持久pojo中的作用是什么?基于这个等式,它将从缓存中获取持久对象吗 如果equals未能以正确的方式实现,那么将发生什么,这意味着每次它都会命中数据库?当您的实体在当前会话中被管理时,将被置于PersistenceContext中 每个load或get操作都将查询该上下文,如果该实体存在,则返回其实例,否则将命中数据库。延迟加载也会发生这种情况 实现equals和hashcode 打算以推荐的方式将持久类的实例放在一个集合中,以表示多值关联和 打算使用分离实例的重新附着 第一级缓存不使用equals方法来管理其上下文。StatefulPersistenceContext使用EntityKey 从DefaultLoadEventListener类 因此,缓存时不需要等于hibernate如何从缓存中获取peristent对象(1/2),hibernate,Hibernate,HibernateAPI如何第二次从缓存第1级和第2级获取持久对象 我知道,第一个请求从数据库中获取,并给出持久对象,如果启用,还将其放入一级缓存和二级缓存 当我第二次查询它将如何从缓存中提取时?加载和获取将如何获取 另外,equals、hashcode在持久pojo中的作用是什么?基于这个等式,它将从缓存中获取持久对象吗 如果equals未能以正确的方式实现,那么将发生什么,这意味着每次它都会命中数据库?当您的实体在当前会话中被管理时,将被置于PersistenceContext中 每个loa
@Override
public boolean containsEntity(EntityKey key) {
return entitiesByKey.containsKey( key );
}
protected Object loadFromSessionCache(
final LoadEvent event,
final EntityKey keyToLoad,
final LoadEventListener.LoadType options) throws HibernateException {
SessionImplementor session = event.getSession();
Object old = session.getEntityUsingInterceptor( keyToLoad );
if ( old != null ) {
// this object was already loaded
EntityEntry oldEntry = session.getPersistenceContext().getEntry( old );
if ( options.isCheckDeleted() ) {
Status status = oldEntry.getStatus();
if ( status == Status.DELETED || status == Status.GONE ) {
return REMOVED_ENTITY_MARKER;
}
}
if ( options.isAllowNulls() ) {
final EntityPersister persister = event.getSession()
.getFactory()
.getEntityPersister( keyToLoad.getEntityName() );
if ( !persister.isInstance( old ) ) {
return INCONSISTENT_RTN_CLASS_MARKER;
}
}
upgradeLock( old, oldEntry, event.getLockOptions(), event.getSession() );
}
return old;
}