hibernate系列之-修改数据设为只读不做更新

因为要在前台将特定数字改为字符串字段,在前台数据量太大不能在前台将数据进行替换,性能消耗太大,所以只能在后台处理,然而问题在这里:

问题一:将数据进行替换时设置字段值时数据库里面的数据也更新了,而我们的要求是特殊字段显示转换字符串,数据库的数据保持不变,

                试过好多种方法找到一条最简单实用 的方法解决这个问题

               即: 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;
	}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值