JPA - 直接获取地图而不是对象列表

时间:2014-03-16 14:18:39

标签: java jpa

我正在开发一个使用JPA和以下代码的项目,我可以从DB中检索包含用户配置文件的对象列表。每个对象都是一个双字段对象(字,频率)

public class JpaUserprofilesDao implements UserProfilesDao {

@PersistenceUnit
private EntityManagerFactory emf;
EntityManager em;

public EntityManager getEntityManager() {
    return emf.createEntityManager();
}

@Transactional
@Override

 public List<Object[]> getUserProfiles(Long userId){       

    em = getEntityManager();
    try {

        List<Object[]> up =em.createQuery("SELECT up.userprofilesPK.word,  up.userprofilesPK.frequency  from Userprofiles up WHERE up.userprofilesPK.userid= :userid").setParameter("userid", userId).getResultList();

        return up;

    } finally {
        em.close();
    }        
 }
}

在我的项目的另一个类中,我使用以下代码块,以便将上述信息放在Map中并能够操作它。

profileObject = peristanceservice.getUserProfiles(userId);
              for(Object[] s: profileObject ){                       
                   if(!tempList.contains(s[0].toString())){                          
                       bag.put( (String) s[0].toString(), Integer.parseInt(s[1].toString()) );
                       tempList.add(s[0].toString());                                                 
                   }        
                }

即使我得到了结果,也需要花费很长时间来处理由persistance服务返回的对象列表并将它们放到Map中,这最终证明是无用的。 有没有办法直接从persistance服务获取Map?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这不是你想要的,但你可以使用它。

您可以使用Guava将List转换为Map

使用Maps.uniqueIndex

  Returns an immutable map for which the Map.values() are the given elements in the given order, and each key is the product of invoking a supplied function on its corresponding value.

示例:

Map<String,String> mappedRoles = Maps.uniqueIndex(yourList, new Function<String,String>() {
  public String apply(String from) {
    // do stuff here
    return result;
  }});