在server层配置了spring声明式事务,action调用server ,server调用dao。现在问题是:
我在页面上点击查询按钮,进入到action 调用server层的query方法,query方法里面去调用queryByHql,我连续点了5、6次后就卡主了。谁知道为什么?补充:
SupportDaoImpl:
public List queryByHql(final String hql, final Object[] params)
{
Session s = getSession();
Query q = s.createQuery(hql); for (int i = 0; i < params.length; i++)
{
q.setParameter(i, params[i]);
}
return q.list(); //连续几次后就卡在这边了
//session.close(); //加上以后就不卡,每次session都没close了,但是事务就没有用了。
}
我在页面上点击查询按钮,进入到action 调用server层的query方法,query方法里面去调用queryByHql,我连续点了5、6次后就卡主了。谁知道为什么?补充:
SupportDaoImpl:
public List queryByHql(final String hql, final Object[] params)
{
Session s = getSession();
Query q = s.createQuery(hql); for (int i = 0; i < params.length; i++)
{
q.setParameter(i, params[i]);
}
return q.list(); //连续几次后就卡在这边了
//session.close(); //加上以后就不卡,每次session都没close了,但是事务就没有用了。
}
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource2"></ref>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.autocommit">
false
</prop>
<prop key="hibernate.dialect">
org.hibernate.dialect.OracleDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="packagesToScan">
<list>
<value>com.zxh.entity.nation</value>
</list>
</property>
</bean>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url" value="${url2}"/>
<property name="username" value="${username2}"/>
<property name="password" value="${password2}"/>
</bean>
<!-- 事物切面 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" />
<tx:method name="del*" />
<tx:method name="get*" read-only="true" />
<tx:method name="list*" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<!-- 配置切入点 -->
<aop:config>
<aop:advisor advice-ref="txAdvice"
pointcut="execution (* com.zxh.server.nation*.*(..))" />
</aop:config>一部分关键的都在这边了
别自己创建session 和管理session
execution (* com.zxh.server.nation.*.*(..))" 项目搞来搞去吧“.”给搞掉了,郁闷,导致事务部成功每次session都不一样,就果session越开越多,没有关闭,数据库就产生死锁了。
非常感谢7楼的回复,确实是问题所在,我打印一下 hascode()终于发现每次session都不同。