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 .