Je recherche essentiellement une annotation de type "@ Ignore" avec laquelle je peux empêcher la persistance d'un champ particulier. Comment cela peut il etre accompli?
@Transient
répond à vos besoins.
Pour ignorer un champ, annotez-le avec @Transient
afin qu'il ne soit pas mappé par la mise en veille prolongée.
mais alors jackson ne sérialisera pas le champ lors de la conversion en JSON.
Si vous avez besoin de mélanger JPA avec JSON (omis par JPA mais toujours inclus dans Jackson), utilisez @JsonInclude
:
_@JsonInclude()
@Transient
private String token;
_
CONSEIL:
Vous pouvez également utiliser JsonInclude.Include.NON_NULL et masquer les champs en JSON lors de la désérialisation lorsque _token == null
_:
_@JsonInclude(JsonInclude.Include.NON_NULL)
@Transient
private String token;
_
Pour ignorer un champ, annotez-le avec @Transient
afin qu'il ne soit pas mappé par la mise en veille prolongée.
Source: Annotations Hibernate .
Cette réponse arrive un peu en retard, mais elle complète la réponse.
Afin d'éviter qu'un champ d'une entité ne persiste dans la base de données, on peut utiliser l'un des deux mécanismes suivants:
@ Transient - L'annotation JPA indiquant qu'un champ n'est pas persistable
transitoire mot-clé en Java. Attention, l'utilisation de ce mot clé empêche l'utilisation du champ avec un mécanisme de sérialisation quelconque à partir de Java. Donc, si le champ doit être sérialisé, vous feriez mieux d'utiliser uniquement l'annotation @ Transient .
Pour compléter les réponses ci-dessus, j'ai eu le cas d'utiliser un fichier de mappage XML dans lequel ni le @Transient
ni le transient
ne fonctionnaient pas ... Je devais mettre les informations transitoires dans le fichier xml:
<attributes>
(...)
<transient name="field" />
</attributes>
Aucune des réponses ci-dessus n'a fonctionné pour moi avec Hibernate 5.2.10, Jersey 2.25.1 et Jackson 2.8.9. J'ai finalement trouvé la réponse (en quelque sorte, ils font référence à hibernate4module mais cela fonctionne pour 5 aussi) ici . Aucune des annotations Json n'a fonctionné avec @Transient
. Apparemment, Jackson2 est suffisamment "intelligent" pour ignorer gentiment les éléments marqués de @Transient
à moins que vous ne leur disiez explicitement de ne pas le faire. La clé consistait à ajouter le module hibernate5 (que j'utilisais pour traiter d'autres annotations Hibernate) et à désactiver la fonction USE_TRANSIENT_ANNOTATION
dans mon application Jersey:
ObjectMapper jacksonObjectMapper = new ObjectMapper();
Hibernate5Module jacksonHibernateModule = new Hibernate5Module();
jacksonHibernateModule.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION);
jacksonObjectMapper.registerModule(jacksonHibernateModule);
Voici la dépendance pour le module Hibernate5:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.8.9</version>
</dependency>