我已经开始学习JPA,我在很多网站上搜索过,但我找不到关于这个例子的解释:
使用@NamedQuery实现查询:
@Entity
@NamedQuery(
name="findAllEmployeesByFirstName",
queryString="SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName = 'John'"
)
public class Employee implements Serializable {
...
}
我无法理解为什么作者正在选择一个Object(emp)..为什么他没有使用这样的东西SELECT emp FROM Employee emp WHERE emp.firstName = 'John'
有区别吗?我想念一下吗?
答案 0 :(得分:3)
SELECT OBJECT(emp) FROM Employee emp
与
完全相同SELECT emp FROM Employee emp
参见JPA规范。 [69]请注意,不需要关键字OBJECT。对于新查询,最好省略它。
“OBJECT”的起源是在EJB中(现已过时)。
答案 1 :(得分:2)
选择实体时,它们是同义词表达式。
在Java中声明interface
时,你可以声明abstract interface
但它更长并且它什么也没带,所以没有人这样做。
答案 2 :(得分:2)
不同之处在于,即使路径表达式可以解析为实体类型,OBJECT关键字的语法也仅限于标识变量。
您可以安全地从查询中删除OBJECT。
举个例子,如果Employee与Department实体有关系,那么使用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