JPA - самый быстрый способ игнорировать поле во время сохранения?

В основном я ищу аннотацию типа "@Ignore", с которой я могу остановить сохранение определенного поля. Как это можно достичь?

Ответ 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>