我在EntityManager上调用find方法两次以获得相同的标识符值。因此,第一次调用触发SELECT语句,但第二次调用不是因为实体已存在于持久化上下文中。这是预期的行为。 但是如果不是第二次调用find(),我使用JPQL来获得非常相同的实体,它会触发另一个SELECT语句。 虽然它返回相同的内存实例,但是发出SELECT不是错误的行为?
答案 0 :(得分:1)
不,这不是“错误行为”。查询可以返回多个对象。 JPA实现不是要检查“这个JPQL与find
的意思是否相同,而且这个应用程序的开发人员只是愚蠢的?”。查询将始终发出SELECT。如果结果的一行等同于L1缓存中的对象,则该对象将返回给用户。