实现了“选择对象(VAR)FROM实体名称VAR查询中使用@NamedQuery
问题描述:
我已经开始学习JPA和我搜索过许多网站和我找不到关于这个例子的说明:实现了“选择对象(VAR)FROM实体名称VAR查询中使用@NamedQuery
实施查询中使用@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'
是否有区别?我想念什么?
答
区别在于即使路径表达式可以解析为实体类型,但OBJECT关键字的语法仅限于识别变量。
您可以安全地从查询中删除OBJECT。
打一个比方,如果员工有一个部门实体的关系,这个查询将是非法的使用对象:
SELECT OBJECT(emp.department) FROM Employee emp WHERE emp.firstName = 'John' // Not valid
SELECT emp.department FROM Employee emp WHERE emp.firstName = 'John' // Valid
答
SELECT OBJECT(emp) FROM Employee emp
是完全相同的
SELECT emp FROM Employee emp
见JPA规范。 [69]请注意,关键字OBJECT不是必需的。对于新的查询,最好省略它。
“OBJECT”的起源在EJB(现在已过时)中。
+0
感谢您的时间来回答@Neil! – Andreea
解释有点复杂,但你是对的。 很好的例子。 +1 – davidxxx