Mik*_*e Q 6 java session hibernate
我希望能够检查会话是否包含给定类/标识符的实体.我现在看不到这样做的方法.
contains() 获取实体对象而不是类+键get() 如果实体不存在则查询数据库,我不想这样做load() 永远不会返回null,因为始终会创建代理,因此我无法使用此方法是否可以执行上述操作而不会对DB产生任何副作用/查询?
回答我自己的问题。
我不认为使用公共 API 可以实现这一点。但是,如果您愿意忍受一些奶酪,您可以执行以下操作
SessionImplementor sessionImplementor = ((SessionImplementor)session);
EntityPersister entityPersister = sessionImplementor.getFactory().getEntityPersister( clazz.getName() );
PersistenceContext persistenceContext = sessionImplementor.getPersistenceContext();
EntityKey entityKey = new EntityKey( id, entityPersister, EntityMode.POJO );
Object entity = persistenceContext.getEntity( entityKey );
if ( entity != null )
return entity;
entity = persistenceContext.getProxy( entityKey );
if ( entity != null )
return entity;
return null;
Run Code Online (Sandbox Code Playgroud)
这依赖于 hibernate 的内部 API,因此如果内部发生更改,将来可能无法工作。
| 归档时间: |
|
| 查看次数: |
5993 次 |
| 最近记录: |