java—如何使用hibernate处理连接

yhxst69z  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(379)

下面是我的hibernate.xml

<property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.c3p0.min_size">5</prop>
            <prop key="hibernate.c3p0.max_size">20</prop>
            <prop key="hibernate.c3p0.timeout">100</prop>
        </props>
    </property>

下面是genericdaoimpl的代码

public abstract class GenericDaoImpl <T> extends HibernateDaoSupport  implements IGenericDao<T> {

   private Class< T > type;

   @Autowired
   public void setHibernateSessionFactory(SessionFactory sessionFactory)
   {
       setSessionFactory(sessionFactory);
   }

   @Override
   public T save(T t) {
      Session session = getSession();
      session.saveOrUpdate(t);
      return t;
   }
}

下面是daoimpl类的代码

Session session = (Session) getSession();
       Query executeQuery = session.createQuery("XXXXX");
        customerDetails = executeQuery.list();
        if(customerDetails !=null)
        {
            if(!customerDetails.isEmpty())
            {
                customerDomain = customerDetails.get(0);
            }
        }

我使用getsession()在daoimpl类中执行查询。对于每个连接,它都在创建与数据库的新连接。我给最大连接大小为20,但这个限制是跨越。我正在更新用户的详细信息,通过csv在那个时候,它是跨越最大的大小限制。它显示了556连接,仅更新86个用户。如何使用hibernate处理连接。?我错过什么了吗。?或者我的代码有问题。?

wlp8pajw

wlp8pajw1#

这是因为您没有关闭hibernate会话,因此数据库连接永远不会被释放。
你甚至不应该使用 HibernateDaoSupport . 您应该使用hibernatetransactionmanager,它负责跨@transactional服务边界的事务和会话管理。

相关问题