java使用@NamedQuery和EntityName变量中的“选择对象(var)”实现查询
我已经开始学习JPA,我在很多网站上搜索过,但我找不到关于这个例子的解释:
使用@NamedQuery实现查询:
@Entity
@NamedQuery(
name="findAllEmployeesByFirstName",
queryString="SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName = 'John'"
)
public class Employee implements Serializable {
...
}
我只是不明白作者为什么选择一个对象(emp)。。他为什么不用这样的东西SELECT emp FROM Employee emp WHERE emp.firstName = 'John'
有区别吗?我错过什么了吗
# 1 楼答案
完全一样
参见JPA规范。 [69]请注意,关键字对象不是必需的。对于新查询,最好省略它
“OBJECT”的起源是在ejb中(现在已经过时了)
# 2 楼答案
不同之处在于,即使路径表达式可以解析为实体类型,OBJECT关键字的语法也仅限于标识变量
您可以安全地从查询中删除对象
举个例子,如果员工与部门实体有关系,则使用以下对象进行此查询将是非法的:
# 3 楼答案
选择实体时,它们是同义表达式。 在Java中声明
interface
也是一样的,可以声明abstract interface
但是它更长,而且没有带来任何东西,所以没有人这样做