这些天,我在阅读有关JPA的信息.我了解到可以在JPQL中使用显式或隐式JOIN.
明确加入
em.createQuery(“SELECT b.title, p.name FROM Book b JOIN b.publisher
p”).getResultList();
隐式联接
em.createQuery(“SELECT b.title, b.publisher.name FROM Book
b”).getResultList();
这些示例的来源:link
我的问题是:显式和隐式JOIN在性能方面是否有区别?
更新
我已经读过您写的@MatteoBaldi和@Kayaman,我已经做了一些测试,我想与您分享结果.
我创建了两个实体:学生和课程,并且我创建了manyToOne(许多学生参加一门课程).我使用了JPA的EcpliseLink实现.
查询=从课程中选择学生和dummyFiled,执行方案:
> manyToOne(defaultFetch-> eager),隐式JOIN.结果:完成所有工作的单个SQL查询.
> manyToOne(Fetch-> lazy),隐式JOIN.结果:与1相同的SQL查询.
> manyToOne(defaultFetch-> eager),显式JOIN.结果:与1相同的SQL查询.
> manyToOne(抓取->惰性),显式加入.结果:与1相同的SQL查询.
因此,在测试环境(EclipseLink,..)中,我有从JPQL查询生成的相同的SQL查询.因此,我可以说性能是相同的(当然,在测试条件下,我再说一遍,我希望有人可以确认/纠正我的结果并制定一般规则.