如何使用本机 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 列:

col1 col2 col3

工作

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&lt;Object[]&gt; 并将其解析为List&lt;Test&gt;

    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,插入失败。为啥?

在 Hibernate 3.2.2 的本机 sql 查询中使用 IN 子句

Hibernate 已返回零结果,但本机 sql 返回不同

Hibernate:本机 SQL 查询重复列结果

如何在休眠本机 SQL 中处理模式

Hibernate 本机查询:无效的列名错误 SQL-17006