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?

200
demandé sur m2o 2009-08-15 17:54:32

6 réponses

@Transient conforme à vos besoins.

335
répondu cletus 2013-12-20 07:14:46

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;
59
répondu user3871754 2017-03-01 07:21:29

pour ignorer un champ, annotez-le avec @Transient pour qu'il ne soit pas cartographié par hibernation.

Source: Hibernate Annotations .

20
répondu Jonathan 2017-04-21 13:34:23

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 .

15
répondu Olimpiu POP 2015-09-02 11:08:02

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>
2
répondu Vinze 2016-09-21 12:24:12

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>
1
répondu Hodglem 2017-08-02 21:38:27