Конвертация сущности в DTO с помощью JPA - PullRequest
6 голосов
/ 15 февраля 2010

Я использую DataNucleus в качестве реализации JPA для хранения своих классов в своем веб-приложении. Я использую набор преобразователей, которые все имеют toDTO() и fromDTO().

Моя проблема в том, что я хочу избежать отправки всей БД по сети:

  • Если я ленивую загрузку, конвертер попытается получить доступ ко ВСЕМ полям и затем загрузить (что приводит к очень активной загрузке).
  • Если мне не ленивая загрузка, я получу огромную часть БД, поскольку пользователь содержит группы, а группы содержат пользователей и т. Д.

Есть ли способ явно загрузить некоторые поля и оставить другие как NULL в моем загруженном классе? Я попробовал документы DataNucleus без удачи.

Ответы [ 2 ]

3 голосов
/ 15 февраля 2010

Ваши DTO, вероятно, слишком мелкозернистые. то есть не планируют иметь DTO для каждой организации JPA. Если вам нужно использовать DTO, сделайте их более крупными и создайте их вручную.

Недавно у нас была целая дискуссия «к DTO или не к DTO, вот в чем вопрос» СНОВА. Требование к ним (особенно в контексте приложения JPA) часто больше не существует, но один из аргументов FOR DTO заключается в том, что представление имеет более жесткие требования к данным.

0 голосов
/ 19 июля 2018

Чтобы загружать только те данные, которые вам действительно нужны, вам нужно использовать пользовательское предложение select, содержащее только те элементы, которые вы собираетесь использовать для своих DTO. Я знаю, насколько это болезненно, особенно когда речь идет о соединениях, поэтому я создал Blaze-Persistence Entity Views , который позаботится о том, чтобы сделать запрос эффективным.

Вы определяете свой DTO как интерфейс с сопоставлениями с сущностью, используя имя атрибута в качестве сопоставления по умолчанию, это выглядит очень просто и во многом похоже на подмножество сущности, хотя это и не обязательно. Вы можете использовать любое выражение JPQL в качестве отображения для ваших атрибутов DTO.

...