package cho3.hibernate;
import java.util.Iterator;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class TestHQL 
{
    public static void main(String[] args) 
    {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
       // Transaction tx = session.beginTransaction();
        
        
        String HQL1="select user.name from User user";
        Query query1=session.createQuery(HQL1);
        List list1=query1.list();
        Iterator it=list1.iterator();
        System.out.print(it.next());
        while(it.hasNext())
        {
         System.out.print(it.next());
        }
        
        
       // tx.commit();
        session.close();
        sessionFactory.close();    }

}
原先表中是有数据的 每次一查询 表中的数据就没了 而且System.out.print(it.next())还一个数据的输出不了
这是为什么呀?

解决方案 »

  1.   

    把while循环前面的System.out.print(it.next());去掉。至于每次查询之后数据就没了和这段代码没有关系。
      

  2.   

           SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    我注释掉这句后面的语句 也发现 每次运行  表中的数据都会变为空了 是不是配置的问题呀?
      

  3.   

    跟踪一下,设置打印SQL,看执行到哪里的时候删除的数据。
    很可能是配置的问题。
     
      

  4.   

    每次运行都只有 select ....
    我估计是运行 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 这个之后 表中数据就为空了 
    所以        while(it.hasNext())
            {
                System.out.print(it.next());
            }
    it.hasNext 为FALSE 就打印不了 
      

  5.   

    hibernate可以配置为自动创建表,本来我是怀疑这个原因,每次运行程序时重新创建表,
    但是这样的话应该是每次都查不到数据才对,与你的这个情况又不符。
      

  6.   

    应该是每次运行创建sessionFactory时,重新创建了表,楼主又提交了一些数据
      

  7.   

    反正你这一段代码不会导致数据删除,如果你没有在其他地方删除数据的话那肯定就是配置的问题。
    我本人使用hibernate也没多久,不清楚有哪些原因会导致你这样的问题。奇怪的是这么久也没人来帮你,估计是你提供的信息不足。
      

  8.   

    你把hibernate.cfg.xml代码贴一下
      

  9.   

    哈哈 果然是 hibernate.cfg.xml出现了问题改为这个就没问题了<?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"><hibernate-configuration><session-factory><!-- 各属性的配置--><!--为true表示将Hibernate发送给数据库的sql显示出来 --><property name="show_sql">true</property><!-- SQL方言,这边设定的是MySQL --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- 一次读的数据库记录数 --><property name="jdbc.fetch_size">50</property><!-- 设定对数据库进行批量删除 -->
     <property name="jdbc.batch_size">30</property><!--驱动程序--><property name="connection.driver_class">com.mysql.jdbc.Driver</property><!-- JDBC URL --><property name="connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=utf-8</property><!-- 数据库用户名--><property name="connection.username">root</property><!-- 数据库密码--><property name="connection.password">2650631</property><!--映射文件 --><mapping resource="cho3/hibernate/Person.hbm.xml"/>
    <mapping resource="cho3/hibernate/User.hbm.xml"/>
    <mapping resource="cho3/hibernate/Address.hbm.xml"/>
    <mapping resource="cho3/hibernate/Room.hbm.xml"/>
    </session-factory>
    </hibernate-configuration>之前是这个<?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><!--数据库URL-->
    <property name="connection.url">
    jdbc:mysql://localhost:3306/test</property><!--dialect,每个数据库对应的Dialet匹配其平台特性-->
    <property name="dialect">
    org.hibernate.dialect.MySQLDialect
    </property>
    <!--数据库密码-->
    <property name="connection.password">2650631</property>
            <!--JDBC连接池(使用内置的连接池)-->
            <property name="connection.pool_size">1</property>
            <!--设置Hibernate自动管理上下文的策略-->
            <property name="current_session_context_class">thread</property><!--数据库驱动-->
    <property name="connection.driver_class">
    com.mysql.jdbc.Driver
    </property><property name="current_session_context_class">thread</property>
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <property name="hbm2ddl.auto">create</property><!--是否将运行产生的sql语句输出到日志-->
    <property name="show_sql">True</property><mapping resource="cho3/hibernate/Address.hbm.xml" />
    <mapping resource="cho3/hibernate/Person.hbm.xml" />
    <mapping resource="cho3/hibernate/User.hbm.xml" />
    <mapping resource="cho3/hibernate/Room.hbm.xml" />
    </session-factory></hibernate-configuration> 哪位高手能说说到底是哪里的问题呀?
      

  10.   

    <property name="hbm2ddl.auto">create</property>
    这个去了
      

  11.   

    <property name="hbm2ddl.auto">create</property>果然是自动创建表结构。
      

  12.   

    <property name="hbm2ddl.auto">create </property> 表示你进行添加,修改都会把数据库的记录清空,如果不想清空,那把create改成其它的