Hibernate只选择一些字段并映射到Map

时间:2017-03-13 03:50:16

标签: java hibernate

我有实体

@Entity
@Table(name = "TEST")
public class TEST implements Serializable {
   ...

    private String f1;
    private String f2;
    private String f3;
   ....

我需要创建选择abd只获取f1,f2字段。

public Map<Stirng, String> getTestF1AndF2() {
Map<String, String> map = new HashMap<>();
        try { 
            Session mySession = HibernateUtil.getSessionFactory().openSession();
            Query q = mySession.createSQLQuery("SELECT f1, f2 from TEST");
            //???????????????
            //fill map 
            mySession.close();
            return map;
        } catch (Exception e) {
            LOG.log(Level.INFO, e.getMessage());
        }
        return null;
    }

我可以使用myBatis或其他库,但我只需要使用hibernate。如何重新制作此映射?

1 个答案:

答案 0 :(得分:1)

使用以下HQL查询将结果显示为Map

Query query = session.createQuery("select new map(f1 as f1, f2 as f2) from Test");
List<Map<String,String>> result = query.list();

请参阅此类似帖子:

How to fetch hibernate query result as associative array of list or hashmap

如果您想使用SQL查询,请使用:

Query query1 = session.createSQLQuery("select sname as name, grp as grp from students").setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

List<Map<String,String>> result = query.list();

请注意,查询返回值列表,因此结果是其中的Map元素列表。