В чем разница между em.find и em.createQuery

em.find(Enity.classs, Id)

em.createQuery("SELECT e From Entity e WHERE e.Id=:id")

Они эквивалентны? Если нет, чем они отличаются?

1 ответ

Решение

Первый может быть быстрее, потому что провайдер JPA не должен анализировать запрос JPA. Но полученный SQL должен быть точно таким же.

Кроме того, я думаю, что некоторые провайдеры могут относиться к ним по-разному в отношении кеширования - кеширование по ключу или кеширование запросов.

Наконец, API гораздо приятнее с find() - либо возвращает одну запись, либо null, Последний либо возвращает ровно один результат (getSingleResult() - или бросает) или возвращает список (getResultList()).

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