使用缓存的Hibernate列表? - 不更新实体属性

时间:2011-12-06 16:57:01

标签: mysql hibernate caching

我有一个使用hibernate的应用程序。 我做了以下事情:

  1. 使用List列出数据库中的某些实体
  2. 手动登录我的Mysql数据库并更新了一些字段 实体
  3. 在hibernate中再次使用List执行与1
  4. 相同的查询

    hibernate列出的实体未更新。 如果我关闭并打开该应用程序。然后它会正确显示实体更新。

    默认情况下是否使用某种缓存进行休眠?

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/XXX</property>
    <property name="hibernate.connection.username">XXXXXXXXXX</property>
    <property name="hibernate.connection.password">XXXXXXXXXX</property>
    <property name="show_sql">true</property>
    

    列出实体的代码:

            Session s = HibernateUtil.getSession();
            Criteria c = s.createCriteria(Solicitacao.class, "s");
            //Add some Restrictions here
            List<Solicitacao> ls = c.list();
            s.close();
    

    我的会议工厂:

        public class HibernateUtil {
        private static SessionFactory   sessionFactory  = null;
        static {
            // Configurações iniciais de caminho dos diretórios e arquivos
            URL url = HibernateUtil.class.getProtectionDomain().getCodeSource().getLocation();
            File myFile = null;
            try {
                myFile = new File(url.toURI());
            } catch (Exception ex) {
    
            }
            File dir = myFile.getParentFile();
            File xml = new File(dir, "hibernate.cfg.xml");
            /*
             * sessionFactory = new AnnotationConfiguration() .configure("br/com/netradiobrasil/pcp/" +
             * "hibernate/hibernate.cfg.xml") .buildSessionFactory();
             */
            sessionFactory = new AnnotationConfiguration().configure(xml).buildSessionFactory();
        }
    
        public static Session getSession() {
            return sessionFactory.openSession();
        }
    }
    

    我尝试在hibernate.cfg.xml中添加这些行

    <property name="hibernate.cache.use_query_cache">false</property>
    <property name="hibernate.cache.use_second_level_cache">false</property>
    <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    

    还尝试使用:session.setCacheMode(CacheMode.IGNORE)

    但仍未解决我的问题

2 个答案:

答案 0 :(得分:0)

让我猜一下

执行此

Session s = HibernateUtil.getSession();
Criteria c = s.createCriteria(Solicitacao.class, "s");
//Add some Restrictions here
List<Solicitacao> ls = c.list();

您手动更改了数据库中的条目,然后重新启动查询?如果是,那么您可以关闭会话然后重新运行代码吗?

答案 1 :(得分:0)

在我的hibernate.cfg.xml中添加这些行 - 这使得c3p0修复了我的问题

<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">40</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">100</property>