Le moyen le plus rapide D'ignorer un champ pendant la persistance?
je suis essentiellement à la recherche d'une annotation de type" @Ignore " avec laquelle je peux empêcher un champ particulier d'être persistant. Comment cela peut-il être atteint?
6 réponses
pour ignorer un champ, annotez-le avec @Transient
pour qu'il ne soit pas cartographié par hibernation.
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 (omettre par JPA mais toujours inclure dans Jackson) utilisation @JsonInclude
:
@JsonInclude()
@Transient
private String token;
Vous pouvez également utiliser JsonInclude.Comprendre.NON_NULL et cacher les champs dans JSON lors de la desérialisation quand token == null
:
@JsonInclude(JsonInclude.Include.NON_NULL)
@Transient
private String token;
pour ignorer un champ, annotez-le avec @Transient
pour qu'il ne soit pas cartographié par hibernation.
Source: Hibernate Annotations .
Cette réponse arrive un peu tard, mais elle complète la réponse.
pour éviter qu'un champ d'une entité persiste dans DB, on peut utiliser l'un des deux mécanismes:
@Transient - l'annotation de L'app indiquant qu'un champ n'est pas persistant
transitoire mot-clé en java. Attention - en utilisant ce mot-clé, empêchera le champ d'être utilisé avec tout mécanisme de sérialisation java. Donc, si le champ doit être sérialisé, vous feriez mieux d'utiliser seulement l'annotation @Transient .
pour compléter les réponses ci-dessus, j'ai utilisé un fichier de mappage XML où ni le @Transient
ni le transient
ne fonctionnait...
J'ai dû mettre l'information transitoire dans le fichier xml:
<attributes>
(...)
<transient name="field" />
</attributes>
aucune des réponses ci-dessus n'a fonctionné pour moi en utilisant Hibernate 5.2.10, Jersey 2.25.1 et Jackson 2.8.9. J'ai finalement trouvé la réponse (sorte de, ils font référence hibernate4module mais il fonctionne pour 5 aussi) ici . Aucune des annotations de Json ne fonctionnait du tout avec @Transient
. Apparemment, Jackson2 est assez " intelligent "pour ignorer les trucs marqués par @Transient
à moins que vous ne lui disiez explicitement de ne pas le faire. La clé était d'ajouter le module hibernate5 (que j'utilisais pour traiter avec autres annotations D'hibernation) et désactiver la caractéristique USE_TRANSIENT_ANNOTATION
dans mon application De 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 D'Hibernation5:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.8.9</version>
</dependency>