Java 哪种hibernate查询语言更有效
根据hibernate文档 从Cat作为Cat,其中Cat.id=123 从Cat作为Cat,其中Cat.mate.id=69 第二个查询是高效的,不需要表联接 我认为第一个查询不需要表连接,第二个查询需要内部连接。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
如果我错了,请纠正我。这些是从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';