java - 将投影形式的休眠 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 的查询方式,但是我也读过它是无效的。
感谢帮助!
解决方案
如果你想创建MyClass
你只需要在查询中使用类的完全限定名称,例如
SELECT NEW my.pack.MyClass(p.one, p.two) FROM MyClass p WHERE p.id IN :id
我还没有听说过这是无效的,我无法想象为什么会这样。它只是在结果上调用构造函数,而不是将其作为数组或对象返回。总的来说,这可能是一种非常好的获取方式,因为您只选择您需要的字段。
此选项和其他选项也将在此处进行更详细的说明。
推荐阅读
- python - 如何在 OpenCV 中执行图像阈值化和归一化?
- android - 如何使用浮动操作栏中心实现底部导航
- c# - 如何使用实体框架从数据库中的前 xxx 行搜索
- aws-lambda - 如何将上传/应用程序安装到设备场远程会话中
- cordova - Youtube API 在 Phonegap 中被阻止
- python - 通过对相同键的值求和来合并字典列表
- c++ - 如何有条件地实例化具有多个模板参数的模板类?
- reactjs - 渲染到带有上下文的字符串?
- java - 我在以下程序中得到 OptionalDataException。为什么会出现这个错误
- android - 如何处理 UI 中的数据库事务延迟以提供良好的用户体验?