在我们的应用程序中,我们使用org.hibernate.internal.AbstractSessionImpl.createQuery(String)方法执行查询。
我们希望根据应用程序业务逻辑将cacheable属性设置为true或false。
Query query = getSession().createQuery(SINGLE_KEY_LIST);
query.setCacheable(true);
例如,对于很少有休眠表或数据很少更改的实体,我们希望将查询设置为可缓存。因此,我们将要覆盖createQuery方法,然后检查查询中涉及的表/实体是否需要可缓存,如果为true,则将cacheable属性设置为true。这将确保所有createQuery方法都将通过我们的自定义createQuery代码,并在其中进行此附加检查。
为此,我不确定如何获取实体对象以验证此检查。
public abstract class HibernateQueryCreation extends AbstractSessionImpl {
protected HibernateQueryCreation(SessionFactoryImpl factory, String tenantIdentifier) {
super(factory, tenantIdentifier);
}
public Query createQuery(String queryString) {
Query q = super.createQuery(queryString);
/*
if(entity is cacheble) {
q.setCacheable(true);
}
*/
return q;
}
}