готовый способ получить idmap из hibernate для данной сущности? - PullRequest
0 голосов
/ 21 мая 2010

Снова и снова я чувствую, что получаю список из hibernate, и первое, что нужно сделать, это поместить его в idmap

нравится:

List<House> entities = s.createCriteria(House.class).list();
Map<String,House> entitymap  = new HashMap<String,House>();
for(TA_entity e:entities){
  entitymap.put(e.getId(), e);
}

Есть ли способ получить это прямо из гибернации? в конце концов, Hibernate знаком с идентификатором.

1 Ответ

1 голос
/ 22 мая 2010

Ничего стандартного нет, но расширение CriteriaImpl не должно быть слишком сложным. Что-то вроде:

public class MapCriteria extends CriteriaImpl implements Criteria {

public MapCriteria( Criteria criteria ) {
super( ((CriteriaImpl)criteria).getEntityOrClassName(), ((CriteriaImpl)criteria).getSession() );
}

public <I, T> Map<I, T> map( String indexMethodName ) throws HibernateException {
Map<I, T> map = null;
try {
    List<T> results = list();
    if ( null != results ) {
    map = new HashMap<I, T>();
    if ( !results.isEmpty() ) {
        Class clazz = Class.forName( getEntityOrClassName() );
        Class[] params = new Class[0];
        Method method = clazz.getMethod( indexMethodName, params );
        Object[] args = new Object[0]; 
        for ( T result : results ) {
        I index =  (I) method.invoke( result, args );
        map.put( index, result );
        }
    }
    }
}
catch (ClassNotFoundException e) {
    throw new HibernateException( e );
}
catch (NoSuchMethodException e) {
    throw new HibernateException( e );
}
    catch (IllegalArgumentException e) {
    throw new HibernateException( e );
    }
    catch (IllegalAccessException e) {
    throw new HibernateException( e );
    }
    catch (InvocationTargetException e) {
    throw new HibernateException( e );
    }
return (Map<I, T>) map;
}

}

Тогда вы сможете звонить

Map<String, House> entitymap  = new MapCriteria(s.createCriteria(House.class).list()).<String, House>map("getId");

Это должно избавить вас от необходимости каждый раз кодировать конверсию на карту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...