Query queryObject = xxDAO.getSession().createQuery(queryString);
List list = queryObject.list();
Iterator iterator = list.iterate();
你试试用list
不敢保证能行
不过我用的都是list
或许是地方的事

解决方案 »

  1.   

    采用List的方法效果是一样的,如果这里不用hibernate的查询而是直接写sql,就不会有问题,我看了网上有说hibernate中有记录一二级缓存的概念,但是没有弄明白,所以担心是不是在查询过程中,它是将查询结果记录在缓存中,数据变化后,又将新结果记录,但是同时还保留了旧结果,之后返回给调用方显示结果的时候,这个地方乱了,希望有明白这个机制的给我一个解答,谢谢!
      

  2.   

    修改了数据库中的数据后```你使用flush();这个方法一下,
    新session里再查.
      

  3.   

    楼上的建议是要我关闭当前session,然后调用工厂类重新建立一个session么?这样的话会不会给造成太大的开销,我见有文章写道建议一个线程只创建一个Session。
    另外,你说得调用flush(),应该是在那里调用,我修改数据库记录的方式非常简单,只是在外部数据库连接工具中修改,并未通过程序修改记录,本就是为了简单的测试。
      

  4.   

    删除IE的缓存文件看看能成不!!
    IE-》属性-》删除文件
    有可能是IE的事,我以前也碰到过。
      

  5.   

    可能是缓存的问题.用LIST或者清一下缓存.是SESSION的缓存.不是IE的
      

  6.   

    在你的hibernate.cfg.xml文件里,把类似hibernate.cache的的设置关掉
      

  7.   

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration><session-factory>
    <property name="connection.username">root</property>
    <property name="connection.url">
    jdbc:mysql://localhost:3306/goosign
    </property>
    <property name="dialect">
    org.hibernate.dialect.MySQLDialect
    </property>
    <property name="myeclipse.connection.profile">MySQL_JK</property>
    <property name="connection.driver_class">
    com.mysql.jdbc.Driver
    </property>
    <property name="connection.password">root</property>
    <mapping resource="com/hibernate/table/SysMail.hbm.xml" /></session-factory></hibernate-configuration>
    上面是我的hibernate.cfg.xml文件,不知如何设置hibernate.cache,请教了!
      

  8.   

    估计是缓存问题,建议再次查询的之前手动清一下缓存session.evict()//清指定的实体
    session.clear()//清空session的缓存
    或者试一下手动与数据库同步session.refresh();
      

  9.   

    .iterator调用时它是先到一级或二级缓存中去查找相关的OID,如果有就直接拿出来用,如果没有才会执行select,是争对ID的查询
      

  10.   

    那么请问kkcheng(风晨sniper),我这里的代码应该用如何方式改写呢?
      

  11.   

    为什么数据库的值会被其他程序改变?  如果这就是业务需求, 那么不要用hibernate的查询, 直接用SQL查.
      

  12.   

    业务上是有这个需求,数据库的记录会定时被更新,在同一个hibernate的session中查找这样的记录就会出现上述的现象,这种情况不能使用hibernate的查询么?
      

  13.   

    有可能数据库机制不同,换oracle试下,如果还是不行,那就是hibernate的问题了。
      

  14.   

    Hibernate的最大优点就是强大的缓存机制,缓存分为一级缓存和二级缓存,一级缓存是Session的缓存,二级缓存是SessionFactory级别的缓存。当你访问一个对象时,Hibernate自动会把这个对象放在一级缓存中,当你再次访问这个对象时是从缓存中取的。清除一级缓存的方法是
    session.evict()//清指定的实体
    session.clear()//清空session的缓存
    如果你每次访问都关闭Session的话就不存在这样的问题了,如果每次关闭Session,一级缓存就不起任何的做用了。
      

  15.   

    既然业务上有这样的需求, 你就要禁止session的缓存. session的缓存好象没法通过配置禁止.
    如果是某几个表有这样的需求, 那么你可以如上 session.evict()//清指定的实体, 每次查询都套上这个,  这么做用hibernate就失去很大意义了, 等于JDBC加DTO方式