dao层extends BaseDaoJpa修改数据设为只读不做更新
2015-10-30 17:43
453 查看
因为要在前台将特定数字改为字符串字段,在前台数据量太大不能在前台将数据进行替换,性能消耗太大,所以只能在后台处理,然而问题在这里:
问题一:将数据进行替换时设置字段值时数据库里面的数据也更新了,而我们的要求是特殊字段显示转换字符串,数据库的数据保持不变,
试过好多种方法找到一条最简单实用 的方法解决这个问题
即: session.setReadOnly(item, true);设为只读就解决了这个问题,只读取不做更新
问题一:将数据进行替换时设置字段值时数据库里面的数据也更新了,而我们的要求是特殊字段显示转换字符串,数据库的数据保持不变,
试过好多种方法找到一条最简单实用 的方法解决这个问题
即: session.setReadOnly(item, true);设为只读就解决了这个问题,只读取不做更新
public PageListHelper searchByArgs(PageListHelper page, Map<String, Object> argMap) { List args = new ArrayList(); StringBuffer sb = new StringBuffer(); StringBuffer countsb = new StringBuffer(); String argSql = toArgSql(argMap); String sql = "select a from Item a where a.deleted = 0 " + argSql; sb.append(sql); countsb.append("select count(a) from Item a where a.deleted = 0 "); countsb.append(argSql); sb.append(" order by publisherTime desc "); Query q = this.entityManager.createQuery(sb.toString()); Query countQuery = this.entityManager.createQuery(countsb.toString()); for (int i = 0; i < args.size(); i++) { q.setParameter(i + 1, args.get(i)); countQuery.setParameter(i + 1, args.get(i)); } Long count = (Long) countQuery.getSingleResult(); q.setFirstResult(page.getStartPosition()); q.setMaxResults(page.getObjectsPerPage()); page.setFullListSize(Integer.parseInt(count.toString())); List<Item> itemList = q.getResultList(); try { Session session = (Session) this.entityManager.getDelegate(); for (int i = 0; i < itemList.size(); i++) { Item item = itemList.get(i); // 设置上牌地 if (StringUtils.isNotBlank(item.getCarLicenseLocate())) { String provinceSql = "select name from province where code=" + item.getCarLicenseLocate().split("-")[0]; org.hibernate.Query provinceQuery = session .createSQLQuery(provinceSql); String proviceName = provinceQuery.uniqueResult() .toString(); String zxSql = "select zx_flag from province where code=" + item.getCarLicenseLocate().split("-")[0]; org.hibernate.Query zxQuery = session.createSQLQuery(zxSql); String zx = zxQuery.uniqueResult().toString(); if ("1".equals(zx)) { //item.setCarLicenseLocate(proviceName); item.setCarLicenseLocateFormat(proviceName); } else { // 得到city String citySql = "select name from city where code=" + item.getCarLicenseLocate().split("-")[1]; org.hibernate.Query cityQuery = session .createSQLQuery(citySql); String cityName = cityQuery.uniqueResult().toString(); item.setCarLicenseLocateFormat(proviceName + cityName); } /* * // 得到province String provinceSql = * "select name from province where code=" + * item.getCarLicenseLocate().split("-")[0]; * org.hibernate.Query provinceQuery = session * .createSQLQuery(provinceSql); String proviceName = * provinceQuery.uniqueResult() .toString(); // 得到city * String citySql = "select name from city where code=" + * item.getCarLicenseLocate().split("-")[1]; * org.hibernate.Query cityQuery = session * .createSQLQuery(citySql); String cityName = * cityQuery.uniqueResult().toString(); * item.setCarLicenseLocate(proviceName + " " + cityName); */ } // 设置颜色 if (StringUtils.isNotBlank(String.valueOf(item.getCarColor()))) { // detail_dic_name String colorNameSql = "select t.detail_dic_name from (select * from sys_dic_item " + "where dic_parent_code = 'color')as t where t.detail_dic_code='" + item.getCarColor() + "'"; org.hibernate.Query colorQuery = session .createSQLQuery(colorNameSql); String colorName = colorQuery.uniqueResult().toString(); item.setCarColor(colorName); } session.setReadOnly(item, true); } page.setList(itemList); } catch (Exception e) { e.printStackTrace(); log.error(e); } return page; }
相关文章推荐
- java中的HashSet和TreeSet的区别,以及HashSet导致的内存泄漏详解
- Angular.js笔记
- 【Struts】strust.xml中<result type="">所有类型详解
- 利用SpannableString实现标签TAG效果(可加圆角)
- 【构】一种手游实用的PVP同步模型
- Qt中开机启动画面
- nc引用类注意问题
- github -- fork提交项目
- android代码混淆
- java文件上传下载
- 简单的上传事例
- 数据类型转换的三种方式 Convert,parse和TryParse的解析
- 墨菲定律
- echarts实现节点访问
- elasticsearch-river-kafka 插件的环境配置和使用
- java中判断任何一个整数区间的素数的个数,并输出所有的素数
- 写支票的滞留金的算法
- php 发送邮件代码
- MySql数据库基础操作
- Markdown离线版(MAC)