JPA:实体经理的查找方法与jpql JOIN

时间:2016-02-03 16:10:45

标签: jpa jpql entitymanager

如果我有一个与实体B具有一对多关系的实体A,并且我必须获取A以及相关的B,我可以使用EntityManager的find方法或者我可以使用JOIN编写JPQL查询。

哪种方法在效率和最小数据库调用方面更好?

1 个答案:

答案 0 :(得分:1)

我假设EntityManager.find(class,primary key,...)调用将加载所有关联的B,这要归功于@JoinTable和@OneToMany注释的正确使用,因此find和JPQL JOIN产生相同的结果在一次调用中。

如果这是真的,那么我对Hibernate和JPA(2.0 / 2.1)的体验是没有区别,特别是如果你使用二级缓存,我会这样做。做任何方便的事。

说过唯一方式可以肯定地知道自己要执行计时。不仅在不同的JPA实现(如Hibernate和EclipseLnk)之间存在差异,而且在同一系统的不同版本之间存在差异。

此外,您的JPQL性能会有所不同,具体取决于您是否预先编译了查询(我总是这样做),或者它是动态的Criteria JPQL。另外,各种二级缓存对性能的影响很大。