郁闷两天的事情今天终于被解决了。弄了个example示例查询,组合Requisition(申请表单)属性和Ratify(领导审批)属性查询。每次查询几次就会出现问题。特别是组合没有的实例时就会 浏览器就停在那走不动了,其它的页面有关查询数据库的也查询不到,表现为客户端浏览器不动。
在myeclipse中有个错误:
java.net.SocketException: Software caused connection abort: socket write error
后来baidu,google都没有找出解决的办法
后来仔细才发现,都是查询了7次后,hibernate就死吊了。
这个问题下次解决,见下一篇Session was closed
后来发现在启动tomcat时有个警告
一开始报WARN 说是ehcache-failsafe.xml找不到 那我就把ehcache1.1包里的ehcache-failsafe.xml拷到classes下面 但是还报错误。后来又换了ehcache1.2.4版本,也是一样。
后来在网上baidu,google找了好久才知道 其实不是ehcache-failsafe.xml的错误 。 由于hibernate 用到了ehcache所以还要建立一个ehcache.xml 这样才行。
1、首先设置EhCache,建立配置文件ehcache.xml,(默认的位置在class-path),可以放到你的src目录下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000" <!-- 缓存最大数目 -->
eternal="false" <!-- 缓存是否持久 -->
overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时-->
timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 -->
timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁-->
diskPersistent="false"
diskExpiryThreadIntervalSeconds= "120"/>
</ehcache>
2、在Hibernate配置文件中设置:
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>com/ouou/model/Videos.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
<prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop>
<!--add ehcache-->
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">false</prop><!-- 是否使用查询缓存 -->
<!--
<prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml</prop>
<prop key="hibernate.show_sql">true</prop>
-->
<!--<prop key="hibernate.transaction.auto_close_session">true</prop>-->
<prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
<!-- Create/update the database tables automatically when the JVM starts up
<prop key="hibernate.hbm2ddl.auto">update</prop> -->
<!-- Turn batching off for better error messages under PostgreSQL -->
<prop key="hibernate.jdbc.batch_size">25</prop>
<!--
<prop key="hibernate.connection.pool_size">10</prop>
-->
</props>
</property>
</bean>
如果不设置“查询缓存”,那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、 list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置hibernate.cache.use_query_cache true 才行