Java Hibernate查询缓存是否适用于本机查询?

Java Hibernate查询缓存是否适用于本机查询?,java,hibernate,Java,Hibernate,下面是我使用hibernate查询的代码片段。它很好用。当我触发时,请执行此代码 时间查询在从查询缓存中拾取时未被激发 Session session = hibernateFactory.openSession(); Query employeeQuery=session.createQuery("from Employee where employeeId=1");//line 1 employeeQuery.setCacheable(true); Employ

下面是我使用hibernate查询的代码片段。它很好用。当我触发时,请执行此代码 时间查询在从查询缓存中拾取时未被激发

   Session session = hibernateFactory.openSession();
    Query employeeQuery=session.createQuery("from Employee where employeeId=1");//line 1
    employeeQuery.setCacheable(true);
    Employee employee1=(Employee)employeeQuery.uniqueResult();
    session.close();
但当我将上面代码段中的第1行替换为下面的第1行时,我得到了异常

Query employeeQuery=session.createSQLQuery("select * from Employee where employeeId=1");
执行是

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at org.hibernate.type.TypeHelper.disassemble(TypeHelper.java:146)
at org.hibernate.cache.StandardQueryCache.put(StandardQueryCache.java:106)
at org.hibernate.loader.Loader.putResultInQueryCache(Loader.java:2434)
at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2321)
at org.hibernate.loader.Loader.list(Loader.java:2268)
查询缓存是否不适用于本机查询


更新:-我认为查询缓存适用于HQL,而不适用于本机SQL。但是在hibernate文档中,它并没有被写在任何地方。所以我只是想知道我是否遗漏了任何东西

SQLQuery不支持缓存。它可以帮助你


最好使用hibernate SQL sintaxis。

SQLQuery不支持缓存。它可以帮助你


最好使用hibernate SQL sintaxis。

我还认为查询缓存适用于HQL,而不适用于本机SQL。但在hibernate文档中,它不在任何地方编写:(我还认为查询缓存适用于HQL,而不适用于本机SQL。但在hibernate文档中,它不在任何地方编写:(您可以尝试添加标量吗?从异常情况来看,在将结果转换为对象时,它似乎失败了。但是,当我使用列别名并希望指定别名类型时,需要添加标量。如果我没有使用任何别名,我不需要提及它们,对吗?您是对的。Hibernate应该在情况是这样的。但是,如果缓存中不支持SQL查询,Hibernate一开始就不应该查看缓存。这似乎需要通过一些怪癖来完成。也许可以尝试一下scalars。您使用的是什么Hibernate版本?或者您可以尝试此解决方法/解决方案,如中所述,您可以尝试添加scalars吗在将结果转换为对象时,它看起来好像失败了。但是,当我使用列别名并希望指定别名类型时,需要添加标量。如果我没有使用任何别名,我不需要提及它们,对吗?你是对的。在这种情况下,Hibernate应该使用
ResultSetMetadata
。但是,如果不支持SQL查询,则再次说明orted in caching Hibernate一开始不应该查看缓存。它看起来似乎必须通过一些怪癖来完成。也许可以尝试一下scalars。您使用的是什么Hibernate版本?或者您可以尝试在中介绍的解决方法/解决方案