gpt4 book ai didi

java - 从 hibernate 获取给定实体的 idmap 的开箱即用方法?

转载 作者:行者123 更新时间:2023-12-01 16:04:38 25 4
gpt4 key购买 nike

我一次又一次地发现自己从 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 状态中取出?毕竟 Hibernate 对 id 很熟悉。

最佳答案

没有任何开箱即用的东西,但扩展 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");

这将使您不必每次都编写转换为 map 的代码。

关于java - 从 hibernate 获取给定实体的 idmap 的开箱即用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2884643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com