浏览 2753 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-04-24
最近用hibernate做demo。
用find是可以的,createQuery也是可以的。但是在iterate的时候就报错,说连接已经关闭,不能在关闭的连接上做这个操作。 我的环境是jboss3.0.2+tomcat4.0.4+hibernate2.1 +sql server2000 望高手解答一下, 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-04-24
你是不是关闭了相应的session,再遍历iterator的
|
|
| 返回顶楼 | |
|
最后更新时间:2004-04-24
没有的,是遍历以后才关闭的。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-04-24
跟用find是一样的,就是将find换成iterate,然后变了相应的接收参数。就报这个错误啊。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-04-25
贴出代码,映射
|
|
| 返回顶楼 | |
|
最后更新时间:2004-04-25
【引用】跟用find是一样的,就是将find换成iterate,然后变了相应的接收参数。就报这个错误啊。
【引用】没有的,是遍历以后才关闭的。 这两句话没有必然联系,还是帖出映射与代码,让斑竹为你诊断吧:) |
|
| 返回顶楼 | |
|
最后更新时间:2004-04-26
jboss中hibernate的配置如下:
<server> <mbean code="net.sf.hibernate.jmx.HibernateService" name="jboss.jca:service=HibernateFactory, name=HibernateFactory"> <depends>jboss.jca:service=RARDeployer</depends> <depends>jboss.jca:service=LocalTxCM,name=DataSource</depends> <!-- Make it deploy ONLY after DataSource had been started --> <attribute name="MapResources">mappings/User.hbm.xml</attribute> <attribute name="JndiName">HibernateFactory</attribute> <attribute name="Datasource">java:/DataSource</attribute> <attribute name="Dialect">net.sf.hibernate.dialect.SybaseDialect</attribute> <attribute name="TransactionStrategy">net.sf.hibernate.transaction.JTATransactionFactory</attribute> <attribute name="TransactionManagerLookupStrategy">net.sf.hibernate.transaction.JBossTransactionManagerLookup</attribute> <attribute name="UseOuterJoin">false</attribute> <attribute name="ShowSql">false</attribute> <attribute name="UserTransactionName">UserTransaction</attribute> </mbean> </server> mapping文件是这样的。 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="dbdemo.User" table="Users"> <id name="userID" unsaved-value="null"> <column name="userID" sql-type="char(32)" not-null="true"/> <generator class="uuid.hex"/> </id> <property name="emailAddress"> <column name="emailAddress" sql-type="varchar(16)" not-null="true"/> </property> </class> </hibernate-mapping> Session session1 =sessionFactory.openSession(); Transaction tx= session1.beginTransaction(); //Iterator q = session1.iterate("select user from User as user where user.userID like '%'"); //Iterator q = session1.iterate("from User as user where user.userID like '%'"); Iterator q = session1.find("from User as user").iterator(); //Query que=session1.createQuery("from User as user"); //que.setFirstResult(1000); //que.setMaxResults(1); //List uList=que.list(); //Iterator q=uList.iterator(); Vector v1=new Vector(); Vector v2=new Vector(); User user=null; int i=0; while(q.hasNext()){ i++; user=(User)q.next(); v1.add(user.getUserID()); v2.add(user.getEmailAddress()); //session1.evict(user); } out.print(" total:"+i); tx.commit(); 数据源用的是jboss提供的数据源,这个程序在asa上测试完全通过的,现在就是把jboss的数据源改在另一个sql server2000的服务器上,更改了相应的配置,插入数据是好的,就是在查询的时候用iterate就出错,而find、Query都是可以用的。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-04-26
楼主要记住,只要session一关闭,iterator里的数据就会消失,这是它和用find取数据的不同的地方
|
|
| 返回顶楼 | |
|
最后更新时间:2004-04-26
我的关闭语句没有贴出来,它是在commit()之后的。
还有就是evict()好像没有启作用啊,加与不加在查询所用的时间是差不多的,而在asa上是很明显的。查询10000条数据在asa上用时在evict()时如下:41048/3704 用jdbc直接连接的用时4334。 我们准备将系统转到hibernate上,现在做一个性能上的测试。如果感兴趣的朋友可以看看这些数据。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-04-26
这里是一个性能测试报告,
|
|
| 返回顶楼 | |








