我们正在使用动态HQL查询生成器,它生成如下查询的查询:
select sum(en1.amount) from SampleEntity1 as en1 where en1.child.name = ?
Hibernate将上面的查询转换为sql,如下所示:
select sum(tbl1.c_amount) from sampletable1 as tbl1, samplechild as child1 where tbl1.c_child = child1.c_id and child1.c_name = ?
表sampletable1和samplechild都有超过100万条记录,并且由于生成的sql具有交叉连接,因此查询的性能非常低,并且它遭受了大量的数据库I / O. 但是如果我们使用内部联接运行sql,查询将以更好的性能运行。
有没有办法强制hibernate将这样的HQL查询转换为内连接而不是交叉连接?
答案 0 :(得分:0)
这是一个内连接,但它不使用内连接语法。如果您希望它具有内部联接语法,请使用内部联接,如Hibernate reference manual:
中所述select sum(en1.amount) from SampleEntity1 as en1
inner join en1.child child
where child.name = ?
我很惊讶两个查询都不会在同一时间执行。它们是等价的,应该使用相同的索引。