JPA:find() vs query



对于相同的标识符值,我在EntityManager上调用find方法两次。所以第一个调用激发SELECT语句,但第二个调用并没有,因为实体已经存在于持久上下文中。这是意料之中的行为。但是,如果我使用JPQL来获取相同的实体,而不是第二次调用find(),它就会触发另一条SELECT语句。虽然它返回相同的内存实例,但发出SELECT不是错误的行为吗?

不,这不是"错误行为"。一个查询可以返回多个对象。JPA实现并不是用来检查"这个JPQL的含义与find相同吗?而这个应用程序的开发人员只是很傻?"。查询将始终发出SELECT。如果一行结果等于一级缓存中的一个对象,那么该对象将返回给用户。

最新更新