Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哪种hibernate查询语言更有效_Java_Hibernate - Fatal编程技术网

Java 哪种hibernate查询语言更有效

Java 哪种hibernate查询语言更有效,java,hibernate,Java,Hibernate,根据hibernate文档 从Cat作为Cat,其中Cat.id=123 从Cat作为Cat,其中Cat.mate.id=69 第二个查询是高效的,不需要表联接 我认为第一个查询不需要表连接,第二个查询需要内部连接。 如果我错了,请纠正我。这些是从HQL生成的SQL示例 来自Cat的第一个作为Cat,其中Cat.id=123: 第二个来自Cat作为Cat,其中Cat.mate.id=69: 如果您有以下HQL:from Cat as Cat,其中Cat.mate.name='mate',则SQL

根据hibernate文档

从Cat作为Cat,其中Cat.id=123

从Cat作为Cat,其中Cat.mate.id=69

第二个查询是高效的,不需要表联接

我认为第一个查询不需要表连接,第二个查询需要内部连接。
如果我错了,请纠正我。

这些是从HQL生成的SQL示例

来自Cat的第一个作为Cat,其中Cat.id=123:

第二个来自Cat作为Cat,其中Cat.mate.id=69:

如果您有以下HQL:from Cat as Cat,其中Cat.mate.name='mate',则SQL将如下所示:

select c.* from Cat c join Mate m on c.mate_id = m.id where m.name='mate';

c、 mate_id是一个外键,它引用mate的id列

@user872487这两个查询都不需要联接。请仔细看我的答案。文档中并没有说明第二个查询更高效,而是说第二个查询更高效,因为它不需要连接。@user872487而第一个查询更高效,因为您按主键搜索,它只返回一行或零。在按外键搜索的第二个查询中,该查询可能返回多行。但您不需要联接,因为Cat表中有足够的信息来生成结果。
select c.* from Cat c where c.mate_id=69;
// no joins (because cat.mate.id is the identifier in Mate)
// that's why it's efficient
select c.* from Cat c join Mate m on c.mate_id = m.id where m.name='mate';