JPA find() и refresh() без общего кэша

Интересно, если эти методы эквивалентны, когда общий кэш отключен:

@Stateless
public class EntityService
{
    @PersistenceContext
    private EntityManager em;

    public <T> T findEntity1(Class<T> clazz, long id)
    {
        return em.find(clazz, id);
    }

    public <T> T findEntity2(Class<T> clazz, long id)
    {
        T entity = em.find(clazz, id);
        em.refresh(entity);
        return entity;
    }
}

Эти методы никогда не вызываются внутри существующей транзакции. Доступ к базе данных осуществляется исключительно этим приложением с использованием только JPA, и триггер / хранимая процедура / другое не определены.

Я предполагаю, что они эквивалентны, потому что:

  • em.find () будет искать общий кеш (L2), но он пуст (отключен)
  • em.find () будет искать свой собственный кэш (L1), но он пуст (предыдущая транзакция отсутствует = em новый)
  • em.find () получит доступ к БД
  • em.refresh() будет обращаться к БД во второй раз, но в этом сценарии сущность всегда одинакова

Я что-то пропустил?

0 ответов

Другие вопросы по тегам