如何使用本机 SQL 在 Hibernate 中获取仅包含选定列的表实体列表?
Posted
技术标签:
【中文标题】如何使用本机 SQL 在 Hibernate 中获取仅包含选定列的表实体列表?【英文标题】:How to get List of Table Entity with only selected columns in Hibernate using native SQL? 【发布时间】:2017-01-15 09:52:25 【问题描述】:我正在尝试使用 Hibernate 的 session.createSQLQuery()
方法执行 SQL 查询。
test
表有 3 列:
工作
String sql = "SELECT * FROM test";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Test.class);
List<Test> testEntityList = query.list();
不工作
String sql = "SELECT col1, col2 FROM test";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Test.class);
List<Test> testEntityList = query.list();
错误:
在此 ResultSet 中找不到列 col3。
我只需要从表中而不是整个表中检索 几个特定列。
我怎样才能做到这一点?
【问题讨论】:
此错误表示“XYZ”不是test
中的列。如果您使用SELECT *
,您是否将XYZ
视为一列?
表和 POJO 中不存在 Tyler 列 XYZ。例如,有 3 列 - 姓名、年龄和地址。现在,当我将 sql 查询用作“Select * from Tbl”时,它可以正常工作。但是当我只选择 - 假设两列 - 从 tbl 选择名称,年龄时,错误来自未找到列地址。
啊误会了,这只是一个占位符。道歉。
【参考方案1】:
您可以使用休眠投影,请参阅此答案Hibernate Criteria Query to get specific columns 或者您可以通过将返回类型更改为来做到这一点
List<Object[]>
并将其解析为List<Test>
List<Object[]> testEntityList = query.list();
List<Test> res = new ArrayList<Test>(testEntityList.size());
for (Object[] obj : testEntityList)
Test test = new Test();
test.setCol1(obj[0]);
test.setCol2(obj[1]);
res.add(test);
【讨论】:
以上是关于如何使用本机 SQL 在 Hibernate 中获取仅包含选定列的表实体列表?的主要内容,如果未能解决你的问题,请参考以下文章
使用本机 SQL 创建表适用于 Hibernate/HSQLDB,插入失败。为啥?