SQL 返回行,行包含列。
JPQL 稍微复杂一点:它可以返回多行列,也可以返回实体实例。
所以,假设您有一个(无效的)JPQL 查询,例如
select * from School school
join school.students student
where ...
查询应该返回什么?学校实例?学生实例?列?很难知道。假设它返回学校和学生的所有字段,字段的顺序是什么?您如何使用这些结果?
如果你这样做了
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 * 也被认为是不好的做法:查询返回的列可能比实际需要的多,您现在不需要列的顺序,而是依赖列在结果集中的名称,而不是在查询中指定所需的名称。