Рубрики
Без рубрики

@Переходный com JPA: 3 вещи, которые вы не должны делать!

Использовать @Transient с JPA может показаться простым, но есть 3 вещи, которые вы делаете, они могут сделать ваш код запутанным. С тегами java, java ee, jpa, спящий режим.

Использовать @Transient с JPA может показаться простым, но есть 3 вещи, которые вы делаете, они могут сделать ваш код запутанным. Узнайте сейчас, как использовать его наилучшим образом писать код высокого качества, и передать проект в срок!

Почему JPA?

Как и все, что мы будем использовать в программировании, мы должны понять, концепции, чтобы мы не головную боль позже. Мы используем JPA в основном, чтобы сделать объектно-реляционного отображения . В целом, мы хотим установить отношения между нашими объекты и реляционные базы данных. Что мы делаем, это в основном это:

@Переходный com JPA

С момента, когда вы запишите свой класс с @Entity, JPA надеется, что все атрибуты ее были связаны в столбец базы. Атрибуты аннотированный с @Transient являются исключением из этого правила. В некотором смысле, эта аннотация работает как инструмент, чтобы обойти основные концепции с JPA. Большой вопрос в том, что каждая небольшая разница вы создаете между вашим таблице и ваш класс приносит дополнительные сложности для их сопоставления.

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

1. Использовать @Transient с JPA, чтобы установить тип операции

Обычный сценарий. Вы находитесь в классе, где он выполняет свои бизнес-правила и получает объект Пользователя. Вам нужно знать, чтобы создать нового пользователя, или обновить существующий, и ты это создает атрибут переходные.

Если вы написали код таким образом, это хорошее время для рефакторинга. Атрибут “обновить” не имеет абсолютно ничего общего с классом User. Итак, последовательность их код был для космоса. Вы создали сильную связь между поведением метод salvarUsuario и flag , что находится внутри организации. Кроме того, такие сущности должны иметь атрибуты, связанные с ней.

В этом случае, вероятно, ее поток бизнес для новой регистрации и обновления бывают разные. Даже на уровне представления, редко страницу пользователя регистрируетесь же, где он обновляет свои данные. Тогда не имеет смысл связать это в свой бизнес. Было бы намного лучше иметь две отдельные методы для каждой операции, и класс User чистой.

Кроме того, если вы получаете объект внешнего вызова или уровень представления, следует использовать шаблон DTO .

2. Использовать @Transient с JPA, чтобы провести дано для проверки

Другой сценарий, в котором вы можете рассмотреть возможность использования @Transient с JPA, когда поняли, что необходимо пройти дано только для проверки, но не для сохранения. Увидеть.

В этом случае у нас есть два примера. Атрибуты выше, были созданы только для того, чтобы ваш бизнес-слой за какой-либо проверки. Вероятно, будет что-то более или менее так:

Этот код имеет некоторые проблемы:

  • Во-первых, эти атрибуты не действительно имеет отношение к сущности, которая, будучи сохранить.
  • После, эти проверки не должны быть так глубоко в бэкэнд. Подтверждение email служит для предотвращения возможной ошибки, опечатки, то, что находится гораздо ближе к презентации слоя. Принятие условий использования, только для того, чтобы убедиться, что пользователь зашел с условиями и/или нажал на checkbox, то, что не меняется поведение этого приложения.
  • И наконец, тех, кто, называя этот метод может обойти проверку. Уровень представления может просто скопировать содержимое email для confirmacaoEmail , и набрать true, aceitouTermosDeUso. После этого, она сделает вызов. Их проверка только будет служить, чтобы дать ложное чувство безопасности.

Что бы тогда альтернатива? Многое зависит от вашего сценария:

  • Если вы используете службу rest, пусть презентации сделать эту работу. Если вы хотите, чтобы долго поддерживать атрибуты, чтобы напомнить пользователю свои услуги, чтобы сделать эти проверки, рассмотрите возможность получения DTO , а не его сущности.
  • Если вы используете какой-то фреймворк как JSF, просто сделайте это проверка на его controller , без создания атрибутов в классе.
  • В худшем случае, если вы все еще верите, иметь какой-то причине, чтобы сделать это, используйте отдельных параметров, оставляя ее сущности из того:

3. Использовать @Transient с JPA для хранения других лиц, временно

Другой случай, когда использовать @Transient с JPA часто используется, чтобы хранить список других объектов. Например:

По нескольким причинам, которые не являются предметом данной статьи, часто сопоставления с двусторонними отношениями не рекомендуется. Это делает, что некоторые программисты могут создавать этот атрибут переходные для заполнения, когда это необходимо. Я считаю, что в данном случае проблема “меньшего”, ибо концептуально пользователь действительно есть список адресов.

Большой проблемой здесь является то, когда этот список заполняется. При этом, как правило, вы создаете связь между кодом, который заполнил список, а код, который вы указали. Мои предложения:

  • Если потребитель лица Polzovatel for границы вне системы, или уровня представления, вы можете использовать DTO .
  • Если потребителем является другой частью внутренней системы, которая имеет доступ к базе данных, она же восстановить эту информацию.
  • Рекомендуется использовать сопоставление с двусторонней FetchType. LAZY и определите, какие были бы последствия в коде:
  • Редко вы не сможете использовать один из вариантов, упомянутые выше. Если вы все еще считаете, что нет другого решения, заполните, пожалуйста, этот список только

Использование DTO

Несколько раз в этой статье я привел использовать шаблон DTO. Он был создан специально для этого: передача информации между подсистемами, или четкими границами применения. Единственной уважительной причиной, что я вижу, чтобы не использовать его-это увеличение количества кода. O чамадо шаблонный код . Порем, ао утилиза-ло, пользователь você evita @Transient com JPA.

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

Когда использовать @Transient с JPA

Хорошо, так что не имеет ни одного случая хорошо использовать @Transient? На самом деле, есть. Сценарии, где это примечание очень полезно, чтобы сделать кэш атрибутов, определенных на основе других атрибутов. С помощью того же класса User, можно сделать что-то вроде:

Ясно, что такой сценарий крайне прост, и, возможно, повышение сложности не компенсирует. В конце концов, помните, что в этом случае вы должны назначить значение null для атрибута fullname, если ваш класс является изменяемым, и кто-то изменить primeiroNome или фамилии. Но, в ситуации, где выигрыш в производительности может быть значительным, является допустимым вариантом.

Поздравления ! Теперь вы , знает, как использовать @Transient с JPA, можете поставить в проекта | быстро/| и , расти карьера.

Хотите получать мои лучшие советы для написания кода, высокое качество и доставки проектов в срок? Потом перейдите сюда .

Хотите узнать, как улучшить свой код каждый день? Тогда последует в twitter : в

И ? Знаете, о в других случаях, что мы должны иметь уход за @Transient с JPA? Вас советов где мы использовать без проблем? Поделитесь тоже! Пусть комментарий !

Понравилось, что узнали? Поделитесь с другими Devs!

Оригинал: “https://dev.to/rinaldodev/transient-com-jpa-3-coisas-que-voc-no-deve-fazer-32k4”