JPA:find() 对比查询
JPA:find() vs query
我两次调用 EntityManager 上的 find 方法以获得相同的值 identifier.So 第一次调用触发 SELECT 语句,但第二次调用没有触发,因为实体已经存在于持久性 context.And 中是预期的行为。
但是如果不是第二次调用 find(),我使用 JPQL 来获取完全相同的实体,它会触发另一个 SELECT 语句。
虽然它 returns 相同的内存实例,但是发出 SELECT 不是错误的行为吗?
不,它不是 "wrong behaviour"。一个查询可以 return 多个对象。 JPA 实现不在那里检查 "does this JPQL mean the same as a find
and the developer of this app was just being silly?"。查询将始终发出 SELECT。如果一行结果等同于 L1 缓存中的一个对象,那么该对象将 returned 给用户。
我两次调用 EntityManager 上的 find 方法以获得相同的值 identifier.So 第一次调用触发 SELECT 语句,但第二次调用没有触发,因为实体已经存在于持久性 context.And 中是预期的行为。 但是如果不是第二次调用 find(),我使用 JPQL 来获取完全相同的实体,它会触发另一个 SELECT 语句。 虽然它 returns 相同的内存实例,但是发出 SELECT 不是错误的行为吗?
不,它不是 "wrong behaviour"。一个查询可以 return 多个对象。 JPA 实现不在那里检查 "does this JPQL mean the same as a find
and the developer of this app was just being silly?"。查询将始终发出 SELECT。如果一行结果等同于 L1 缓存中的一个对象,那么该对象将 returned 给用户。