这篇文章很好!换成tomcat连接池后,要把jndi传给Hibernate配置文件,并确保你的连接池可用!

解决方案 »

  1.   

    我就是按这篇文章写的程序,运行一段时间以后,客户机的ie浏览器就会频繁的报http500错误,这时点击ie的后退按钮,等几秒钟,再进行操作就可以正常显示下一页,同时tomcat报错的信息是:
    java.sql.SQLException: Io 异常: Size Data Unit (SDU) mismatch
            at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
            at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
            at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
            at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:389)
            at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:413)
            at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedState
    ment.java:119)
            at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedState
    ment.java:92)
            at oracle.jdbc.driver.OracleConnection.privatePrepareStatement(OracleCon
    nection.java:950)
            at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection
    .java:802)
            at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.ja
    va:249)
            at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.ja
    va:223)
            at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.j
    ava:65)
            at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:704)        at net.sf.hibernate.loader.Loader.doQuery(Loader.java:185)
            at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections
    (Loader.java:133)
            at net.sf.hibernate.loader.Loader.doList(Loader.java:955)
            at net.sf.hibernate.loader.Loader.list(Loader.java:946)
            at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:846)
            at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1543)
            at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)
            at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
            at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
            at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
            at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:389)
            at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:413)
            at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedState
    ment.java:119)
            at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedState
    ment.java:92)
            at oracle.jdbc.driver.OracleConnection.privatePrepareStatement(OracleCon
    nection.java:950)
            at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection
    .java:802)
            at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.ja
    va:249)
            at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.ja
    va:223)
            at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.j
    ava:65)
            at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:704)        at net.sf.hibernate.loader.Loader.doQuery(Loader.java:185)
            at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections
    (Loader.java:133)
            at net.sf.hibernate.loader.Loader.doList(Loader.java:955)
            at net.sf.hibernate.loader.Loader.list(Loader.java:946)
            at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:846)
            at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1543)
            at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)这个就是用的hibernate自带的连接池,要是换成tomcat连接池后,会不会还报这种错误?
      

  2.   

    我觉得那篇文章里查询完成以后并没有关闭session
      

  3.   

    在网上看到这样一段话,不知道是不是真的:永远永远不要把hibernate实体对象直接传递到表现层,因为hibernate对实体进行了动态增强,实体对象都携带数据库连接的引用。你应该把实体取出,封装成DTO,然后立即关闭session,再把DTO传递给表现层不过我已经全方位地去close Session了。应该不会遗漏了。
      

  4.   

    永远永远不要把hibernate实体对象直接传递到表现层,因为hibernate对实体进行了动态增强,实体对象都携带数据库连接的引用。你应该把实体取出,封装成DTO,然后立即关闭session,再把DTO传递给表现层没明白,能不能具体点啊?