В чем разница между em.find и em.createQuery - PullRequest
3 голосов
/ 02 марта 2012
em.find(Enity.classs, Id)

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

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

1 Ответ

4 голосов
/ 02 марта 2012

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

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

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

...