Давайте изобразим следующий вариант использования: у меня есть JPQL-запрос, который на лету создает объекты данных, используя ключевое слово new
. В предложении SELECT
я хотел бы добавить атрибут, который известен не базе данных, а слою, который ее запрашивает.
Это может выглядеть как
EntityManager em; // Got it from somewhere
boolean editable = false; // Value might change, e.g. depending on current date
Query q = em.createQuery("SELECT new foo.bar.MyDTO(o, :editable) FROM MyObject o")
.setParameter("editable", editable);
List<MyDTO> results = (List<MyDTO>) q.getResultList();
Есть идеи, как этот вид вставки атрибутов или параметров в предложение SELECT может работать в JPQL? Возможны решения как JPA, так и JPA 2.0.
Редактировать: Производительность не играет ключевую роль, но ясность и чистота кода.