首页 > 解决方案 > 将投影形式的休眠 HQL 查询映射到对象

问题描述

我只返回 DB 表中的几列:

List<MyClass> l = (List<MyClass>) session.createQuery("Select p.one, p.two FROM MyClass p WHERE p.id IN :id")
                    .setParameter("userId", id)
                    .list();

但是,查询返回数组列表,例如

l.get(0) // [0] is object representing p.one in query, [1] p.two

是否有一种休眠方式如何将其映射到 MyClass 对象?所以查询实际上会返回 MyClass 对象的列表,其中选定的属性将具有值,其他将设置为 null?

我已经阅读了new MyClass(arg1,arg2)与 construtor 的查询方式,但是我也读过它是无效的。

感谢帮助!

标签: javaspringhibernatehql

解决方案


如果你想创建MyClass你只需要在查询中使用类的完全限定名称,例如

SELECT NEW my.pack.MyClass(p.one, p.two) FROM MyClass p WHERE p.id IN :id

我还没有听说过这是无效的,我无法想象为什么会这样。它只是在结果上调用构造函数,而不是将其作为数组或对象返回。总的来说,这可能是一种非常好的获取方式,因为您只选择您需要的字段。

此选项和其他选项也将在此处进行更详细的说明。


推荐阅读