Java 如何在Hibernate中仅检索部分(少数)pojo字段?
在这种情况下,我只需要返回POJO的几个字段。 这里有一个关于同样的问题,但似乎没有什么事情是模糊的 1) 答案建议使用- 字符串employeeName=session.createQuery(“从EmployeeMaster empMaster中选择empMaster.name,其中empMaster.id=:id”).setInteger(“id”,10).uniqueResult() 因此,我关心的是——每个pojo字段通常都是私有的,因此“empMaster.name”根本不起作用。我不确定empMaster.getName()是否是解决此问题的方法。调用getter方法有效吗 2) 如果我查询多个字段(这是我的情况)(假设getter方法有效),那么查询将类似-Java 如何在Hibernate中仅检索部分(少数)pojo字段?,java,hibernate,jpa,Java,Hibernate,Jpa,在这种情况下,我只需要返回POJO的几个字段。 这里有一个关于同样的问题,但似乎没有什么事情是模糊的 1) 答案建议使用- 字符串employeeName=session.createQuery(“从EmployeeMaster empMaster中选择empMaster.name,其中empMaster.id=:id”).setInteger(“id”,10).uniqueResult() 因此,我关心的是——每个pojo字段通常都是私有的,因此“empMaster.name”根本不起作用。我
List<String> employeeDetails = session.createQuery("select empMaster.getName(), empMaster.getDesignation() from EmployeeMaster empMaster where empMaster.id = :id").setInteger("id",10).uniqueResult();
无论如何,这里的重点是强调返回类型的变化:
List我将按照您提到的顺序列出这些点:
查询与POJO的字段可见性无关。您正在对数据库进行简单的查询,就像您在使用SQL进行查询一样,表中的列与应用程序中映射的POJO字段是公共字段还是私有字段这一事实无关。区别仅在于您使用的语言:现在您使用的是Hibernate查询语言(HQL),它允许您根据POJO的定义而不是数据库表的定义来表达查询。事实上
session.createQuery("select empMaster.getName() from EmployeeMaster...");
将引发语法错误:对象的字段名中不能有括号
顺便说一下,您必须将查询结果解析为字符串,否则将出现编译器语义错误
String name = (String) session.createQuery("select empMaster.name from EmployeeMaster...").setYourParameters().uniqueResult();
当您执行一个SELECT子句包含多个字段的查询并调用uniqueResult()
,您将获得一个对象数组(Object[]
)。迭代数组中的每个元素并将其转换为相应的类型
首先,您可能忘记在查询结束时添加.list()
方法调用
session.createQuery("select empMaster.name, empMaster.designation from EmployeeMaster").list();
否则,查询将不会执行,而您将有一个QueryImpl
对象等待触发
现在,当您希望查询中出现多个结果并选择多个字段时,您将返回一个列表。列表的元素是特定记录的字段数组,数组本身就是字段
gr8 hectorricardo,这很有帮助。除非我开始在代码中使用它,否则我无法理解empMaster.name
将如何工作。hibernate解析器如何理解这是什么。除非hibernate使用反射,因此字段的范围无关紧要。在EmployeeMaster定义中,您将有以下内容:列(name=“name”)
字符串名称
,hibernate知道name
对应于表中的name列。由于HQL中的查询将转换为普通SQL,因此这与字段的可见性无关。
session.createQuery("select empMaster.name, empMaster.designation from EmployeeMaster").list();