为什么在 JPQL 中使用 "SELECT c" 而不是 "SELECT * "?
Why "SELECT c" instead of "SELECT * " in JPQL?
JPQL 中的示例查询如下所示:
SELECT c FROM Customer c;
我阅读了 JPA 规范和书籍,但我找不到这个 c 的含义。在 SQL 中我们简单地写:
SELECT * FROM customer;
我知道我们可以使用这个 c 作为别名,即在像这样的 WHERE 子句中:
SELECT c FROM Customer c WHERE c.name = ...
但我仍然不明白这个 c 实际上是什么,如何调用它(别名?对象?)以及为什么它必须紧跟在 SELECT 之后而不是 *.
SQLreturns 行,行包含列。
JPQL 有点复杂:它可以 return 行列,也可以是实体实例。
所以,假设您有一个(无效的)JPQL 查询,例如
select * from School school
join school.students student
where ...
应该查询什么return?学校实例?学生实例?列?很难知道。假设return是学校和学生的所有字段,字段的顺序是什么?您如何使用这些结果?
而如果你这样做
select school from School school
join school.students student
where ...
您告诉 JPQL 您想要获取 School 实体的实例。
如果你这样做
select student from School school
join school.students student
where ...
您告诉 JPQL 您想要获取 Student 实体的实例。
如果你这样做
select school.name, student.firstName, student.age
from School school
join school.students student
where ...
你告诉 JPQL 你想要获取包含三列的行:学校名称、学生名字和学生年龄。
请注意,即使在 SQL 中,从程序中使用 select *
也被认为是不好的做法:查询可能 return 的列比实际需要的多,您不需要现在不是列的顺序,您依赖列在结果集中的名称,而不是在查询中指定所需的名称。
JPQL 中的示例查询如下所示:
SELECT c FROM Customer c;
我阅读了 JPA 规范和书籍,但我找不到这个 c 的含义。在 SQL 中我们简单地写:
SELECT * FROM customer;
我知道我们可以使用这个 c 作为别名,即在像这样的 WHERE 子句中:
SELECT c FROM Customer c WHERE c.name = ...
但我仍然不明白这个 c 实际上是什么,如何调用它(别名?对象?)以及为什么它必须紧跟在 SELECT 之后而不是 *.
SQLreturns 行,行包含列。
JPQL 有点复杂:它可以 return 行列,也可以是实体实例。
所以,假设您有一个(无效的)JPQL 查询,例如
select * from School school
join school.students student
where ...
应该查询什么return?学校实例?学生实例?列?很难知道。假设return是学校和学生的所有字段,字段的顺序是什么?您如何使用这些结果?
而如果你这样做
select school from School school
join school.students student
where ...
您告诉 JPQL 您想要获取 School 实体的实例。
如果你这样做
select student from School school
join school.students student
where ...
您告诉 JPQL 您想要获取 Student 实体的实例。
如果你这样做
select school.name, student.firstName, student.age
from School school
join school.students student
where ...
你告诉 JPQL 你想要获取包含三列的行:学校名称、学生名字和学生年龄。
请注意,即使在 SQL 中,从程序中使用 select *
也被认为是不好的做法:查询可能 return 的列比实际需要的多,您不需要现在不是列的顺序,您依赖列在结果集中的名称,而不是在查询中指定所需的名称。