В основном я ищу аннотацию типа "@Ignore", с которой я могу остановить сохранение определенного поля. Как это можно достичь?
JPA - самый быстрый способ игнорировать поле во время сохранения?
Ответ 1
@Transient
соответствует вашим потребностям.
Ответ 2
Чтобы игнорировать поле, аннотируйте его @Transient
, чтобы он не отображался в спящем режиме.
но затем jackson не будет сериализовать поле при преобразовании в JSON.
Если вам нужна комбинация JPA с JSON (пропустите JPA, но все еще включитесь в Jackson) используйте @JsonInclude
@JsonInclude()
@Transient
private String token;
Вы также можете использовать JsonInclude.Include.NON_NULL и скрыть поля в JSON во время десериализации, когда token == null
:
@JsonInclude(JsonInclude.Include.NON_NULL)
@Transient
private String token;
Ответ 3
Чтобы игнорировать поле, аннотируйте его с помощью @Transient
, чтобы он не отображался в спящем режиме.
Источник: Hibernate Annotations.
Ответ 4
Этот ответ приходит немного позже, но он завершает ответ.
Чтобы исключить поле из сущности, подлежащей сохранению в БД, можно использовать один из двух механизмов:
@Transient - аннотация JPA, обозначающая поле как непротиворечивое
переходное ключевое слово в java. Остерегайтесь - используя это ключевое слово, предотвратит использование поля с любым механизмом сериализации из java. Итак, если поле должно быть сериализовано, вам лучше использовать только аннотацию @Transient.
Ответ 5
Чтобы завершить приведенные выше ответы, я имел дело с файлом сопоставления XML, в котором не работало ни @Transient
, ни transient
...
Мне пришлось поместить временную информацию в файл xml:
<attributes>
(...)
<transient name="field" />
</attributes>
Ответ 6
Ни один из вышеперечисленных ответов не работал у меня, используя Hibernate 5.2.10, Jersey 2.25.1 и Jackson 2.8.9. Я наконец нашел ответ (вроде, они ссылаются на hibernate4module, но он работает и на 5) здесь. Ни одна из аннотаций Json не работала с @Transient
. По-видимому, Jackson2 "умный", чтобы любезно игнорировать материал, отмеченный @Transient
, если вы явно не рассказываете об этом. Ключ должен был добавить модуль hibernate5 (который я использовал для работы с другими аннотациями Hibernate) и отключить функцию USE_TRANSIENT_ANNOTATION
в приложении "Джерси":
ObjectMapper jacksonObjectMapper = new ObjectMapper();
Hibernate5Module jacksonHibernateModule = new Hibernate5Module();
jacksonHibernateModule.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION);
jacksonObjectMapper.registerModule(jacksonHibernateModule);
Вот зависимость для Hibernate5Module:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.8.9</version>
</dependency>