是否可以将session.load(class, id)
与灵活标准(标准api)混合使用?
我需要类似的东西:
select * from entity where id = 1 AND name = 'miller'
我使用通用方法进行id
的查找:
public T findById(ID id, boolean lock) {
T entity;
if (lock)
entity = (T) getSession().load(getPersistentClass(), id, LockMode.UPGRADE);
else
entity = (T) getSession().load(getPersistentClass(), id);
return entity;
}
并希望通过
进行扩展 Criteria criteria = session.createCriteria(getPersistentClass());
criteria.add( Restrictions.eq("name", "miller"));
where ("name", "miller")
将替换为通用的。
答案 0 :(得分:0)
加载和标准不能混用。如果实例尚未在缓存中,则Load会创建代理。 load(和get)的目的是它的参数是缓存的密钥(类和id),它不需要在之前刷新会话。 Criteria是一种查询。当您已经知道id时,您不再需要查询。我的意思是,id = 1 AND name = 'miller'
是否有意义?
只要写下你自己的“获取”:
public TEntity secureGet<TEntity>(int id, string user)
{
// avoid flushing, only when you never expect that the user name
// in the object to be loaded has changed within the current session.
// this is very performance relevant.
session.flushMode = FlushMode.Never;
return session
.createCriteria(typeof(TEntity))
.add( Restrictions.idEq(id))
.add( Restrictions.eq("name", user))
.UniqueResult<TEntity>();
session.flushMode = FlushMode.Auto;
}
(抱歉可能存在语法错误,我不是java程序员)