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

Игнорирование полей с аннотации @Transient JPA

Узнайте, как игнорировать поля с помощью аннотации @Transient JPA на Java.

Автор оригинала: baeldung.

1. Введение

Сохраняя объекты Java в записях баз данных с помощью структуры объектно-реляционного картирования (ORM), мы часто хотим игнорировать определенные поля. Если фреймворка соответствует API сохранения Java (JPA), мы можем добавить @Transient аннотация к этим полям.

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

2. @Transient Аннотация против переходного ключевого слова

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

Другими словами, преходящий ключевое слово имеет тот же эффект, что и @Transient аннотация при сохранении базы данных. Тем не менее, @Transient аннотация не влияет на сериализацию объектов Java.

3. Пример @Transient JPA

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

Например, мы по устанавливаем тайм-штамп на Пользователь сущность, которая представляет, когда пользователь вошел в свою текущую сессию:

@Entity
@Table(name = "Users")
public class User {

    @Id
    private Integer id;
 
    private String email;
 
    private String password;
 
    @Transient
    private Date loginTime;
    
    // getters and setters
}

Когда мы хеем это пользователь объект к базе данных с помощью поставщика JPA, как Hibernate, поставщик игнорирует Время входа поле из-за @Transient аннотация.

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

@Entity
@Table(name = "Users")
public class User implements Serializable {

    @Id
    private Integer id;
 
    private String email;
 
    private String password;
 
    private transient Date loginTime;

    //getters and setters
}

Теперь, Время входа поле игнорируется во время сохранения базы данных и сериализации объектов.

4. Заключение

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

Как всегда, полный исходный код статьи доступен более на GitHub .