我们使用的是休眠3和C3P0-0.9.1。我们有一个基于Hibernate标准的查询,用于检查数据库表中键入的用户名和密码以及其他查询。在执行第一个查询(即登录页面)期间,我们面临着SQLState为空的连接重置问题。如果在页面上再次提供细节,那么在一段时间内一切都很正常。如果我们在一段时间后尝试,第一次再次出现相同的问题,当重新输入用户名和密码时,它在一段时间内工作正常。请查看以下错误消息以供参考。
00:12:42警告[org.hibernate.util.JDBCExceptionReporter:77日志异常]-SQL Error:17002,SQL State:NULL 00:12:42 Error[org.hibernate.util.JDBCExceptionReporter:78 LogExceptions]-IO ExceptionReporter:Connection Reset
以下是示例代码...
public UserSample fetchUserDetails(final String loginId) throws DataAccessException {
return (UserSample) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Criteria criteria = getSession().createCriteria(UserSample.class)
.createAlias("rolesample", "rolesample")
.createAlias("accountsample", "accountsample");
try {
if(loginId!= null){
criteria.add(Restrictions.eq("loginName",loginId));
}
criteria.setProjection(Projections.projectionList()
.add(Projections.property("loginName").as("loginName2"))
.add(Projections.property("password").as("password"))
.add(Projections.property("name").as("name"))
.add(Projections.property("roleId").as("roleId")) );
criteria.addOrder(Order.desc("loginName"));
criteria.setFetchSize(1);
criteria.setMaxResults(1);
criteria.setResultTransformer(Transformers.aliasToBean(UserSample.class));
ArrayList list = (ArrayList)criteria.list();
if(list != null && list.size() > 0) {
return (User)criteria.list().get(0);
}else{
return new User();
}
}
catch (Exception e) {
LogUtil.info(e.getMessage());
return null;
}
}
});
}
应用程序上下文.xml中的连接池如下所示:
<bean id="sampleSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="sampleDataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.query.substitutions">true 1, false 0, yes 'Y', no 'N'</prop>
<prop key="hibernate.connection.pool_size">50</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
<!-- C3P0 Properties -->
<prop key="hibernate.c3p0.min_size">3</prop>
<prop key="hibernate.c3p0.max_size">50</prop>
<prop key="hibernate.c3p0.timeout">1800</prop>
<prop key="hibernate.c3p0.max_statements">100</prop>
<prop key="hibernate.c3p0.idle_test_period">600</prop>
<prop key="hibernate.c3p0.acquire_increment">1</prop>
<prop key="hibernate.c3p0.preferredTestQuery">SELECT 1 FROM DUAL</prop>
</props>
</property>
当我在Oracle客户端(如SQL deverloper)中执行生成的查询时,能够获得结果。但是,在运行应用程序时,随机面对这个问题。你能帮帮忙吗?谢谢。
致以最好的问候,幸运
1条答案
按热度按时间dy2hfwbg1#
您必须提供更多详细信息才能解决此问题。
1.您连接的是哪个数据库?
1.粘贴Hibernate查询执行代码。
By definition连接重置错误是由于
当远程连接由于各种原因(如应用程序崩溃、系统重新启动、远程主机硬关闭)而意外强制关闭时,会出现此异常。来自远程系统的内核向本地系统发送带有RST位的包。执行任何发送(可能是保活分组)或接收操作的本地套接字随后都会失败,并出现此错误。延迟设置的某些组合也可能导致设置了RST位的分组。
为了帮助调试,您可以考虑使用诸如Wireshark之类的工具来查看实际的网络包。