public Personal loadPersonal(final Long actorId) { final StringBuffer hql = new StringBuffer("select p.id,p.uid_,p.status_,p.font,p.theme,p.aid,p.inner_"); hql.append(" from BC_DESKTOP_PERSONAL p where p.aid=0 or p.aid=? order by p.id desc"); if (logger.isDebugEnabled()) { logger.debug("actorId=" + actorId + ",hql=" + hql); } try { return jpaTemplate.execute( new JpaCallback<Personal>() { public Personal doInJpa(EntityManager em) throws PersistenceException { Query queryObject = em.createNativeQuery(hql.toString()); // jpaTemplate.prepareQuery(queryObject); // 注入参数 queryObject.setParameter(1, actorId); // jpa的索引号从1开始 queryObject.setFirstResult(0); queryObject.setMaxResults(1); // 仅获取1条 Personal p = new RowMapper<Personal>() { public Personal mapRow(Object[] rs, int rowNum) { Personal map = new Personal(); int i = 0; map.setId(new Long(rs[i++].toString())); map.setUid(rs[i] != null ? rs[i].toString() : null); i++; map.setStatus(Integer.parseInt(rs[i++].toString())); map.setFont(rs[i++].toString()); map.setTheme(rs[i++].toString()); map.setActorId(new Long(rs[i++].toString())); map.setInner("1".equals(rs[i++].toString())); return map; } }.mapRow((Object[]) queryObject.getSingleResult(), 0); // 如果是全局配置就将其改为当前用户的配置 if (p.getActorId().equals(0)) { p.setActorId(actorId); } return p; } }); } catch (NoResultException e) { return null; } }
/** * Метод для выполнения запроса на изменение данных (delete, update) с выполнением всех * необходимых операций, таких как создание EntityManager, открытие транзакции, выполнение commit * или roll back. * * <p>Метод задает параметры для запроса из списка начиная с 1. Первый параметр в запросе будет * <code>?1</code>, второй <code>?2</code> и т.д. * * @param queryOrQueryName строка запроса или название NamedQuery * @param namedQuery тип запроса (NamedQuery если true, обычный запрос если false) * @param parameters параметры через запятую (будут использоваться в запросе) * @return количество измененнных записей в базе * @throws IllegalArgumentException нет запроса * @throws GeneralServiceException */ @Transactional(propagation = Propagation.REQUIRED, readOnly = false) protected int executeUpdateQuery( final String queryOrQueryName, final boolean namedQuery, final Object... parameters) throws IllegalArgumentException, GeneralServiceException { if (null == queryOrQueryName || queryOrQueryName.isEmpty()) { throw new IllegalArgumentException("Query for executing cannot be empty"); } try { Object rez = jpaTemplate.execute( new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query query; if (namedQuery) { query = em.createNamedQuery(queryOrQueryName); } else { query = em.createQuery(queryOrQueryName); } if (parameters.length > 0) { for (int i = 0; i < parameters.length; i++) { query.setParameter(i + 1, parameters[i]); } } return Integer.valueOf(query.executeUpdate()); } }); return ((Integer) rez).intValue(); } catch (Exception e) { throw new GeneralServiceException(e); } }
public Map<String, Object> loadActorByCode(final String actorCode) { final StringBuffer hql = new StringBuffer( "select a.id as id,a.uid_ as uid_,a.type_ as type_,a.code as code,a.name as name"); hql.append(",a.pcode as pcode,a.pname as pname,t.password as password,h.id as hid"); hql.append(" from bc_identity_actor as a"); hql.append(" inner join bc_identity_auth as t on t.id=a.id"); hql.append(" inner join bc_identity_actor_history as h on h.actor_id=a.id"); hql.append(" where a.code = ? and h.current='1' order by h.create_date desc"); if (logger.isDebugEnabled()) { logger.debug("actorCode=" + actorCode + ",hql=" + hql); } try { return jpaTemplate.execute( new JpaCallback<Map<String, Object>>() { public Map<String, Object> doInJpa(EntityManager em) throws PersistenceException { Query queryObject = em.createNativeQuery(hql.toString()); // jpaTemplate.prepareQuery(queryObject); // 注入参数 queryObject.setParameter(1, actorCode); // jpa的索引号从1开始 queryObject.setFirstResult(0); queryObject.setMaxResults(1); // 仅获取最新的那条(基于bc_identity_actor_history的create_date) return new RowMapper<Map<String, Object>>() { public Map<String, Object> mapRow(Object[] rs, int rowNum) { Map<String, Object> map = new HashMap<String, Object>(); int i = 0; // actor Actor actor = new Actor(); actor.setId(new Long(rs[i++].toString())); actor.setUid(rs[i++].toString()); actor.setType(Integer.parseInt(rs[i++].toString())); actor.setCode(rs[i++].toString()); actor.setName(rs[i++].toString()); actor.setPcode(rs[i++].toString()); actor.setPname(rs[i++].toString()); // auth AuthData auth = new AuthData(); auth.setId(actor.getId()); auth.setPassword(rs[i++].toString()); // history ActorHistory history = new ActorHistory(); history.setId(new Long(rs[i++].toString())); // history.setId(getActorHistoryId(actor.getId())); history.setActorId(actor.getId()); history.setActorType(actor.getType()); history.setName(actor.getName()); history.setPcode(actor.getPcode()); history.setPname(actor.getPname()); map.put("actor", actor); map.put("auth", auth); map.put("history", history); return map; } }.mapRow((Object[]) queryObject.getSingleResult(), 0); } }); } catch (EmptyResultDataAccessException e) { return new HashMap<String, Object>(0); } }