java隐式和显示_java-JPA中的显式和隐式JOIN有什么区别? (性...

这些天,我在阅读有关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查询.因此,我可以说性能是相同的(当然,在测试条件下,我再说一遍,我希望有人可以确认/纠正我的结果并制定一般规则.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值