Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免spring+;冬眠?_Java_Spring_Hibernate - Fatal编程技术网

Java 如何避免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

我在spring上下文中设置了hibernate配置,但在使用一段时间后,出现了连接过多错误。这是我的密码: Spring上下文:

 <!-- 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());