Я недавно узнал, что возможно создать новые Объекты в JPQL
операторы следующим образом:
select new Family(mother, mate, offspr)
from DomesticCat as mother
join mother.mate as mate
left join mother.kittens as offspr
Это - что-то, чтобы избежаться или скорее обняться? Когда использование этой функции выравнивается по ширине в свете хороших методов?
Не избегайте его, SELECT NEW существует потому, что есть совершенно обоснованные случаи его использования, о чем напоминается в §10.2.7.2. JPQL Constructor Expressions in the SELECT Clause of the EJB 3.0 JPA Specification:
Конструктор может быть использован в SELECT, чтобы вернуть один или несколько Java экземпляров. Указанный класс не требуется, чтобы он был сущностью или был сопоставлен с базой данных. The имя конструктора должно быть полностью квалифицированным.
Если имя класса сущности указано в предложении SELECT NEW, то результирующие экземпляры сущностей находятся в новом состоянии.
SELECT NEW com.acme.example.CustomerDetails(c.id, c.status, o.count) FROM Customer c JOIN c.orders o WHERE o.count > 100
Короче говоря, используйте SELECT NEW, когда вы не хотите получить полную сущность или полный граф объектов безопасным для типов способом (в отличие от Object[]
). Будет ли результат запроса отображен в класс сущности или в не отображенный класс, зависит от вашего выбора. Типичным примером может быть экран списка (где вам, возможно, не нужны все детали).
Другими словами, не используйте его везде, но и не запрещайте его использование (мало что бывает только черным или белым).
Вы часто используете этот вид запросов, когда хотите получить объект передачи данных . Может быть, отчет может быть хорошим местом для его использования. Если вы просто хотите получить объект с одним доменом (например, из семейства ), то нет причин его использовать.