В чем разница между 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()
).