本机SQL查询的Hibernate缓存

本机SQL查询的Hibernate缓存,hibernate,Hibernate,下面是我的Hibernate映射文件的一个片段。我们正在使用映射到返回的MyCode对象的本机SQL查询。在Hibernate中实际上只映射了查询中指定的少数表 <hibernate-mapping package="a.b.c.d"> <class name="MyCode" table="OVERRIDE" schema="SCHEMA1"> <id name="myId" type="java.lang.Long">

下面是我的Hibernate映射文件的一个片段。我们正在使用映射到返回的MyCode对象的本机SQL查询。在Hibernate中实际上只映射了查询中指定的少数表

<hibernate-mapping package="a.b.c.d">
    <class name="MyCode" table="OVERRIDE" schema="SCHEMA1">
        <id name="myId" type="java.lang.Long">
            <column name=ID" length="22"/>
            <generator class="assigned"/>
        </id>
        <property name="myCode" type="java.lang.String">
            <column name=CD"/>
        </property>
        <property name="myDescription" type="java.lang.String">
            <column name="DESC" length="120"/>
        </property>
    </class>

    <sql-query name="retrieveCodes">
        <return class="MyCode"/>
        <![CDATA[
        select distinct o.ID, ec.CD, o.DESC
        from SCHEMA1.AEFX aefx, SCHEMA1.EC ec, SCHEMA1.FC fc, SCHEMA1.MYCODE o
        ....
        ....

我们想知道为这个查询添加缓存的好处。相关数据很少更新,但会被大量阅读

关于Hibernate对这些查询类型的支持,我还没有在Hibernate文档中得到明确的答案。我猜二级缓存在这里可能不起作用,因为上面的大多数表都不知道休眠。 关于本机查询的缓存,我们最好的选择是什么


谢谢

每一个本机查询都会使缓存、所有区域失效。

我想是因为很难发现是什么改变了本机查询。例如,您可以调用更改所有数据的存储过程。无法从jvm跟踪它。缓存很容易失效缓存很难。