覆盖休眠的CreateQuery方法

时间:2020-06-03 21:52:27

标签: java hibernate hibernate-mapping hibernate-query

在我们的应用程序中,我们使用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;
    }

} 

0 个答案:

没有答案