JPQL Создают новый Объект В Избранном Операторе - избегают или обнимаются?

Я недавно узнал, что возможно создать новые Объекты в JPQL операторы следующим образом:

select new Family(mother, mate, offspr)
from DomesticCat as mother
    join mother.mate as mate
    left join mother.kittens as offspr

Это - что-то, чтобы избежаться или скорее обняться? Когда использование этой функции выравнивается по ширине в свете хороших методов?

60
задан Hash 21 March 2017 в 12:02
поделиться

2 ответа

Не избегайте его, 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[]). Будет ли результат запроса отображен в класс сущности или в не отображенный класс, зависит от вашего выбора. Типичным примером может быть экран списка (где вам, возможно, не нужны все детали).

Другими словами, не используйте его везде, но и не запрещайте его использование (мало что бывает только черным или белым).

115
ответ дан 24 November 2019 в 17:35
поделиться

Вы часто используете этот вид запросов, когда хотите получить объект передачи данных . Может быть, отчет может быть хорошим местом для его использования. Если вы просто хотите получить объект с одним доменом (например, из семейства ), то нет причин его использовать.

30
ответ дан 24 November 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: