Sto essenzialmente cercando un'annotazione di tipo "@ Ignora" con la quale posso impedire che un particolare campo venga mantenuto. Come può essere realizzato?JPA, il modo più veloce per ignorare un campo durante la persistenza?
risposta
@Transient
conforme alle vostre esigenze.
Per ignorare un campo, annotarlo con @Transient
in modo che non venga mappato dalla modalità di sospensione.
Fonte: Hibernate Annotations.
Questa risposta arriva un po 'in ritardo, ma completa la risposta.
Per evitare un campo da un organismo di essere mantenuta nel DB si può utilizzare uno dei due meccanismi:
@Transient - l'annotazione JPA marcatura un campo non Persistable
transient parola in java. Attenzione: l'uso di questa parola chiave impedirà l'utilizzo del campo con qualsiasi meccanismo di serializzazione da java. Pertanto, se il campo deve essere serializzato, è preferibile utilizzare solo l'annotazione @Transient.
che ne dici di voler solo ignorare la persistenza sul metodo get ?. Ad esempio: myjparepository.save() salverà il modello come al solito e myjparepository.find (id) ignorerà il campo che voglio? – xtiger
non ho idea se è possibile. Scusa –
Per completare le risposte di cui sopra, ho avuto il caso utilizzando un file di mapping XML in cui né il @Transient
né transient
lavorato ... ho dovuto mettere l'informazione transitoria nel file XML:
<attributes>
(...)
<transient name="field" />
</attributes>
Per ignora un campo, annotalo con @Transient
in modo che non venga mappato da ibernazione.
ma poi jackson non serializzerà il campo durante la conversione in JSON.
Se avete bisogno di mescolare JPA con JSON (omettere dalla APP, ma ancora comprendere a Jackson) utilizza @JsonInclude
:
@JsonInclude()
@Transient
private String token;
È anche possibile utilizzare JsonInclude.Include.NON_NULL e nascondere campi in JSON durante la deserializzazione quando token == null
:
@JsonInclude(JsonInclude.Include.NON_NULL)
@Transient
private String token;
Sto eseguendo JAX-RS 2.0.1/Jersey 2.25.1/Jackson 2.8.7 e con quello stack '@ JsonInclude' non è necessario: i campi' @ Transient' sono ancora inclusi in JSON. (Hai ancora ottenuto il mio voto: la tecnica stessa potrebbe essere molto utile in altre circostanze). – DKroot
Nessuna delle risposte di cui sopra ha funzionato per me utilizzando Hibernate 5.2.10, Jersey 2.25.1 e Jackson 2.8.9. Alla fine ho trovato la risposta (sorta di riferimento a hibernate4module ma funziona anche per 5) here. Nessuna delle annotazioni Json ha funzionato affatto con @Transient
. Apparentemente Jackson2 è abbastanza "intelligente" da ignorare gentilmente le cose contrassegnate con @Transient
a meno che tu non le dica esplicitamente di farlo. La chiave è stato quello di aggiungere il modulo hibernate5 (che usavo a che fare con altre annotazioni Hibernate) e disattivare la funzione USE_TRANSIENT_ANNOTATION
nella mia applicazione Jersey:
ObjectMapper jacksonObjectMapper = new ObjectMapper();
Hibernate5Module jacksonHibernateModule = new Hibernate5Module();
jacksonHibernateModule.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION);
jacksonObjectMapper.registerModule(jacksonHibernateModule);
Ecco la dipendenza per il Hibernate5Module:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.8.9</version>
</dependency>
Dopo aver provato ogni altro metodo di parlare sopra e altri '@ JsonProperty' ' @ JsonInclude' '@JsonSerialize + @ JsonDeserialize'' mapper.configure (MapperFeature.PROPAGATE_TRANSIENT_MARKER, false)); ' questa soluzione alla fine ha funzionato. Grazie! – Aceonline
- 1. Il modo più veloce per scrivere dati durante la produzione
- 2. Il modo più veloce per diventare un esperto di MySQL?
- 3. Il modo più veloce per testare la connessione Internet
- 4. Un modo per rendere md5_file() più veloce?
- 5. Nome unità di persistenza dinamica JPA
- 6. JPA e PostqreSQL: lunga persistenza delle stringhe
- 7. JPA cascata persistenza con entità chiavi ElementCollection
- 8. Il modo più veloce per verificare se esiste un oggetto
- 9. Il modo migliore per gestire l'unione JPA?
- 10. JPA Multiple Unit Persistenza bug
- 11. Il modo più veloce per unificare un elenco in Python
- 12. JPA. Come ignorare alcuni campo solo su operazione di unione
- 13. modo più veloce per dividere una stringa concatenata in un tuple e ignorare le stringhe vuote
- 14. un modo più veloce per scaricare più file
- 15. Il modo più veloce per rendere il sito web reattivo?
- 16. MSMQ per la persistenza?
- 17. Come aggiungere e ignorare un campo per la risposta JSON
- 18. Entità JPA: specificare l'unità di persistenza?
- 19. Il modo più veloce per determinare il minimo non zero
- 20. Configurazione persistenza e orm con JPA 2
- 21. modo più veloce per digitare lambda simbolo
- 22. È questo il modo più veloce per raggruppare in Panda?
- 23. Il modo più veloce ed efficiente per creare XML
- 24. Il modo più veloce per eseguire l'aggiornamento di massa
- 25. Unità di persistenza JPA multiple per dev/qa/stage/production
- 26. Il modo più veloce per spostare l'immagine in OpenCV
- 27. Il modo più veloce per imparare Zend Framework?
- 28. Il modo più veloce per leggere a lungo [] dal file?
- 29. Il modo più veloce per comunicare tra C++ e C#
- 30. Il modo più veloce per convertire stringhe in binario?
Ma poi jackson non serializzerà il campo durante la conversione in JSON ... come risolvere? – MobileMon
che dipende dalla tua app desing.se annoti la tua classe di entità - si applica ovunque; ma se si usa il dao che usa l'entità, è un'altra storia. in breve: utilizzare DAO quando si dispone di più depositi – Sarief
@MobileMon controllare la mia risposta di seguito su jackson – user3871754