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())还一个数据的输出不了
这是为什么呀?
我注释掉这句后面的语句 也发现 每次运行 表中的数据都会变为空了 是不是配置的问题呀?
很可能是配置的问题。
我估计是运行 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 这个之后 表中数据就为空了
所以 while(it.hasNext())
{
System.out.print(it.next());
}
it.hasNext 为FALSE 就打印不了
但是这样的话应该是每次都查不到数据才对,与你的这个情况又不符。
我本人使用hibernate也没多久,不清楚有哪些原因会导致你这样的问题。奇怪的是这么久也没人来帮你,估计是你提供的信息不足。
<!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> 哪位高手能说说到底是哪里的问题呀?
这个去了