2016-05-18 12 views
0

Я прочитал некоторые информационные сообщения, такие как this и this, но я все еще смущен.Получить карту <String,<T>> из таблицы

Hibernate версия 4.3.11 Таблица счета MySQL является:

Field   Type   Null Key 
Id    int(11)   NO  PRI 
Reference  varchar(20)  NO  UNI  
Balance   decimal(10,5) NO   
Currency  varchar(3)  NO   
Valid   tinyint(1)  NO   
Type   varchar(20)  YES   

Метод AccountDaoImpl:

@Override 

Принимает коллекцию действительных ссылок счета @param accountReferences @ return A java.util.Map с ссылкой на аккаунт как ключ, а объект Account как значение @throws DaoExce ption

public Map<String, Account> getAccountsByReferences(Collection<String> accountReferences) throws DaoException { 
     // TODO Auto-generated method stub 

     if (accountReferences == null || accountReferences.isEmpty()) { 
      return null; 
     } 

     if (accountReferences.size() > Constants.MAX_ACCOUNTS_SIMULT) { 
      throw new DaoException("Please query " + Constants.MAX_ACCOUNTS_SIMULT + " at a time"); 
     } 

     String accountByRefSQL = "SELECT new map(acc.reference,acc) FROM Account acc WHERE acc.reference IN (:accountReferences)"; 

     Session session = null; 
     try { 
      session = HibernateUtil.getSessionFactory().openSession(); 

      Query query = session.createQuery(accountByRefSQL).setParameterList("accountReferences", accountReferences); 

      return findMany(query); 

     } catch (DaoException daoException) { 
      log.error("DaoException in AccountDaoImpl.findAccountByReference(...)", daoException); 
      throw daoException; 
     } catch (HibernateException e) { 
      log.error("HibernateException in AccountDaoImpl.findAccountByReference(...)", e); 
      throw new DaoException(e.getMessage()); 
     } finally { 
      session.close(); 
     } 
    } 

Метод findMany() находится в родительском GenericDao:

public List<T> findMany(Query query) throws DaoException { 
     try { 
      List<T> t; 
      t = (List<T>) query.list(); 
      return t; 
     } catch (HibernateException hibernateExecption) { 
      log.error("Hibernate Exception in GenericHibernateDaoImpl.findMany(...)", hibernateExecption); 
      throw new DaoException(hibernateExecption.getMessage()); 
     } catch (RuntimeException runtimeException) { 
      log.error("RuntimeException in GenericHibernateDaoImpl.findMany(...)", runtimeException); 
      throw new DaoException(runtimeException.getMessage()); 
     } 

    } 

Есть два вопроса:

  1. В соответствии с нитями упомянутых мною, вызов является правильным (я dunno how!)
  2. В потоках указано, что Запрос вернется, вернет список карт - я не понимаю это

ответ

0

Получил ответ от this forum thread.

Вы пытаетесь создать список на карте. Check out the map() синтаксис. Предполагается, что карта завершает ResultSet, но запрос возвращает список.

Предлагаю вам вернуть список, а затем построить карту с помощью простой итерации .

 Смежные вопросы

  • Нет связанных вопросов^_^