Java 如何避免spring+;冬眠?
我在spring上下文中设置了hibernate配置,但在使用一段时间后,出现了连接过多错误。这是我的密码: Spring上下文:Java 如何避免spring+;冬眠?,java,spring,hibernate,Java,Spring,Hibernate,我在spring上下文中设置了hibernate配置,但在使用一段时间后,出现了连接过多错误。这是我的密码: Spring上下文: <!-- Beans Declaration --> <bean id="Usuarios" class="com.proximate.model.Usuarios"/> <!-- Service Declaration --> <bean id="UsuariosService" class="com.proximat
<!-- Beans Declaration -->
<bean id="Usuarios" class="com.proximate.model.Usuarios"/>
<!-- Service Declaration -->
<bean id="UsuariosService" class="com.proximate.service.UsuariosService">
<property name="usuariosDAO" ref="UsuariosDAO" />
</bean>
<!-- DAO Declaration -->
<bean id="UsuariosDAO" class="com.proximate.dao.UsuariosDAO">
<property name="sessionFactory" ref="SessionFactory" />
</bean>
<bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb" />
<property name="user" value="user" />
<property name="password" value="password" />
<property name="maxPoolSize" value="50" />
<property name="maxStatements" value="0" />
<property name="minPoolSize" value="5" />
</bean>
<!-- Session Factory Declaration -->
<bean id="SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="DataSource" />
<property name="annotatedClasses">
<list>
<value>com.proximate.model.Usuarios</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<!-- Enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="txManager"/>
<context:annotation-config />
<!-- Transaction Manager is defined -->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="SessionFactory"/>
</bean>
为什么我的代码打开了这么多连接。我听说在日志记录后使用HibernateUtil类加载会话可能是我所需要的,但是在使用spring时如何实现它呢??
提前谢谢 我对hibernate本身了解不多,但我认为关闭会话可能会有所帮助。
这就是JPAs
EntityManager的工作原理-您必须关闭它才能关闭基线连接。看起来您的hibernate查询是全局的?我猜原因可能是因为它不包含在一个带有事务性注释的方法中。我认为spring自动做到了这一点?它做到了,但您需要用@transactional
注释包装您的方法。
private SessionFactory sessionFactory;
private HibernateTemplate hibernateTemplate;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
Query query = hibernateTemplate.getSessionFactory().getCurrentSession().createSQLQuery("SELECT ID FROM usuarios");
Integer cantidad = new Integer(((BigInteger) query.uniqueResult()).intValue());