gpt4 book ai didi

hibernate - 为什么在 JPQL 中使用 "SELECT c"而不是 "SELECT * "?

转载 作者:行者123 更新时间:2023-12-03 08:14:09 24 4
gpt4 key购买 nike

JPQL 中的示例查询如下所示:

SELECT c FROM Customer c;

我阅读了 JPA 规范、书籍,但我找不到这个 c 的含义。在 SQL 中,我们简单地写:
SELECT * FROM customer;

我知道我们可以使用这个 c 作为别名,即在 WHERE 子句中,如下所示:
SELECT c FROM Customer c WHERE c.name = ...

但我仍然不明白这个 c 实际上是什么,如何调用它(别名?对象?)以及为什么它必须在 SELECT 而不是 * 之后。

最佳答案

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 * 也被认为是不好的做法。也来自程序:查询可能返回比实际需要更多的列,您现在不知道列的顺序,并且您依赖于列在结果集中的名称,而不是在查询中指定所需的名称。

关于hibernate - 为什么在 JPQL 中使用 "SELECT c"而不是 "SELECT * "?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com