hibernate执行sql解决性能问题

针对Hibernate性能问题,采用直接执行SQL获取特定字段再转换为对象的策略,以此提高查询效率。
摘要由CSDN通过智能技术生成
 最近的项目中发现某些页面打开速度非常慢,最慢的情况下甚至到了30秒。
分析原因后发现是加载由于实体间配了1对1的双向关联,导致lazy加载失效,每次加载都会把关联实体的全部属性查询出来,对性能影响特别大。

最终的解决方案是直接执行sql取得需要的字段,然后再转为对象。代码如下:          



Session session = null;
			String sql = "select o.ID as id, o.OFFICE_NO as officeNo from ASY_OFFICE_INFO o where o.OFFICE_SYSTEM='" + sys + "' and o.OFFICE_STATUS = '1' and o.DEPARTMENT_ID =" + company + " and o.ISEXISTS is null";
			session = baseDao.getHibernate().getSessionFactory().openSession();
			SQLQuery query = session.createSQLQuery(sql);
			query.addScalar("id", Hibernate.LONG).addScalar(
					"officeNo", Hibernate.STRING);
			query.setResultTransformer(Transformers
					.aliasToBean(ManagerOfficeInfo.class));
			
			List<ManagerOfficeInfo> list = query.list();
			session.close();


===========另一种实现方式的分割线=========

private static DataSource dataSource = null;

/**
     * 获取系列生成器数据库连接,无论哪种用户都取同一个连接,确保hibernate缓存正确;.
     *
     * @return the connection
     * @throws SQLException the sQL exception
     */
    private static Connection getConnection() throws SQLException {
        if (da
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值