下面是我的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处理连接。?我错过什么了吗。?或者我的代码有问题。?
1条答案
按热度按时间wlp8pajw1#
这是因为您没有关闭hibernate会话,因此数据库连接永远不会被释放。
你甚至不应该使用
HibernateDaoSupport
. 您应该使用hibernatetransactionmanager,它负责跨@transactional服务边界的事务和会话管理。