Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate@Cache(用法=cacheconcurrencysttrategy.READ\u WRITE)没有相应地工作_Java_Hibernate_Orm - Fatal编程技术网

Java Hibernate@Cache(用法=cacheconcurrencysttrategy.READ\u WRITE)没有相应地工作

Java Hibernate@Cache(用法=cacheconcurrencysttrategy.READ\u WRITE)没有相应地工作,java,hibernate,orm,Java,Hibernate,Orm,我正在尝试使用EhCacheProvider在hibernate应用程序中配置二级缓存。 我在hibernate.cfg.xml中进行了如下配置: <!-- Second-level cache --> <property name="cache.use_second_level_cache">true</property> <property name="cache.provider_class">org.hibernat

我正在尝试使用EhCacheProvider在hibernate应用程序中配置二级缓存。 我在hibernate.cfg.xml中进行了如下配置:

    <!-- Second-level cache -->
    <property name="cache.use_second_level_cache">true</property>
    <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
在我的测试课上:

    public class Test {
        public static void main(String[] args){
            SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory();
            Session session = factory.openSession();
            Session session2 = factory.openSession();
            try{
                session.get(UserDetails.class, 1);

                session.close();

                session2.get(UserDetails.class, 1);

            }catch(Exception e){
                e.printStackTrace();
            }finally{  
                session2.close();
            }
        }
    }
关于二级缓存,我所知道的是,如果一个对象第一次通过存储在二级缓存中的任何会话从数据库中提取,并且如果我们试图从另一个会话中获取相同的对象,那么它将从二级缓存中给定

所以根据测试类,hibernate应该有1个select查询激发,但我在控制台上得到2个select查询

如果我改变主意

  @Cache(usage = CacheConcurrencyStrategy.READ_ONLY) //<-- READ_ONLY instead of READ_WRITE

@Cache(用法=cacheconcurrencysttrategy.READ_ONLY)//会话事务时间应大于缓存更新时间。
像下面这样更改代码-

public class Test { public static void main(String[] args){ SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = factory.openSession(); try{ session.get(UserDetails.class, 1); session.close(); Session session2 = factory.openSession(); session2.get(UserDetails.class, 1); }catch(Exception e){ e.printStackTrace(); }finally{ session2.close(); } } } 公开课考试{ 公共静态void main(字符串[]args){ SessionFactory=new AnnotationConfiguration().configure().buildSessionFactory(); Session Session=factory.openSession(); 试一试{ get(UserDetails.class,1); session.close(); 会话session2=factory.openSession(); 会话2.get(UserDetails.class,1); }捕获(例外e){ e、 printStackTrace(); }最后{ session2.close(); } } } public class Test { public static void main(String[] args){ SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = factory.openSession(); try{ session.get(UserDetails.class, 1); session.close(); Session session2 = factory.openSession(); session2.get(UserDetails.class, 1); }catch(Exception e){ e.printStackTrace(); }finally{ session2.close(); } } }