【发布时间】:2018-01-22 07:57:20
【问题描述】:
我有一种情况,我只需要返回 POJO 的几个字段。 这是一个关于相同问题的SOF Question: retrieve-single-field-rather-than-whole-pojo-in-hibernate 问题,但似乎仍有一些事情是模糊的。
1) 答案建议使用 -
String employeeName = session.createQuery("select empMaster.name from EmployeeMaster empMaster where empMaster.id = :id").setInteger("id",10).uniqueResult();
所以,这是我关心的问题 - 每个 pojo 字段通常都是私有的,所以 "empMaster.name" 根本不起作用。并且不确定 empMaster.getName() 是否是解决此问题的方法。调用 getter 方法会起作用吗?
2)如果我要查询多个字段(这是我的情况)(假设 getter 方法有效),查询将类似于 -
List<String> employeeDetails = session.createQuery("select empMaster.getName(), empMaster.getDesignation() from EmployeeMaster empMaster where empMaster.id = :id").setInteger("id",10).uniqueResult();
请注意,返回类型已从 String 更改为 List<String>。
2(a) 希望这是对的吗?
2(b) 如果我对int 类型的员工的年龄/薪水感兴趣怎么办。我认为返回类型将是List<String> 或List<Object>。无论如何,我可以在应用程序中将String 或Object 重新转换为正确的类型int 或float 等。所以这应该不是问题。
3) 现在,如果我要查询多个员工详细信息(没有 where 子句),那么查询将类似于 - (不确定 from 之后的查询部分是否正确)
List<List<<String>> employeesDetails = session.createQuery("select empMaster.getName(), empMaster.getDesignation() from EmployeeMaster;
不管怎样,这里的重点是要强调将返回类型更改为:List<List<<String>> employeesDetails。是这样的吗???。
(上面引用的问题也有指向使用投影的答案。我对此有疑问,但会在另一个问题上发布,不想混淆。)
【问题讨论】: