2013-04-05 11 views
5

il mio caso è il seguente. Ho una forma JSF con tre outputtexts & corrispondenti inputtexts diciamo:come archiviare un oggetto json in un campo di database di ibernazione

outputtext1 - inputtext1

outputtext2 - inputtext2

outputtext3 - inputtext3

Attualmente io uso un metodo backbean 'Salva' in per archiviarli nel database (l'oggetto di ibernazione consente di pronunciare table1 con la chiave primaria table1.id) nei campi table1.field1, table1.field2, table1.field3.

Quindi ogni record nella tabella ha i valori inseriti nei testi di input.

mia domanda è come faccio a dati del modulo negozio nel database, in una forma simile al seguente:

{ "outputtext1: inputtext1", "outputtext2: inputtext2" "outputtext3:. Inputtext3 "}

e quindi recuperarli di nuovo, analizzare e ricostruire il modulo. Sto pensando di manipolare i dati del modulo come oggetti JSON ... Ma io sono nuovo in entrambi i Java + JSON, quindi qualche guida sarebbe davvero utile per me!

Questo è un esempio indicativo, la forma sta per dinamico e creata al volo.

+0

È solo una stringa, utilizzare 'varchar'. Utilizzare un serializzatore JSON. –

+0

quindi sono nella giusta direzione su come manipolare i dati del modulo? Il modulo sarà dinamico, quindi non esiste un formato standard per i dati del modulo. – thanili

+0

Se non esiste un modulo standard, suppongo che tu stia generando la stringa JSON. Una volta ottenuto, memorizzarlo in un campo varchar. –

risposta

4

Perché si vuole serializzare/deserializzare un JSON per inviarlo direttamente al database? La deserializzazione ha i suoi problemi e deserializzazioni multiple potrebbe (non sarà) essere una fonte di problemi.

È necessario salvare i campi come attributi da una determinata entità e quindi, con l'aiuto di librerie come Gson, generare il JSON dall'entità.


Aggiornamento

Dal momento che il modulo è dinamica, è possibile utilizzare alcuni struttura entità adattabile per tenere i vostri dati.

Le entità possono avere un attributo Map<String,String> o una raccolta di, ad esempio, FieldRecord entità che contengono una coppia chiave-valore.

Suggerisco questo perché un JSON nel database può portare a problemi complessi, in particolare se dovrete interrogare quei dati in seguito. Dovrai elaborare i JSON per segnalare o trovare i record che hanno un campo particolare. Questo è solo un esempio, le cose possono diventare più complesse.

+0

Il modulo sarà dinamico, quindi non avrò un numero o tipo di campi di input standard. Questo è solo un esempio indicativo! – thanili

+0

@thanili È possibile avere un'entità con un 'Map ' o un elenco di entità di associazione. IMO La memorizzazione di un JSON nel database può essere molto difficile da gestire, in particolare se si desidera eseguire query su campi particolari in un secondo momento. Tuttavia, se si sta usando un json, basta crearlo e memorizzarlo in una variabile VARCHAR. – Gamb

+0

OK Gamb, controllerò il tuo suggerimento per un modo più semplice. Effettivamente avrei dovuto interrogare il database per recuperare i valori già inviati per i moduli che sono stati ricaricati. Quindi suppongo che dovrò recuperare l'oggetto JSON, deserializzarlo, analizzarlo, confrontarlo con gli id ​​dei campi dei moduli e ricostruire il modulo :) sembra troppo disturbo ... – thanili

0

semplice, è necessario una colonna di tipo BLOB nella tabella per memorizzare il JSON e quando si recuperano in Java si solo bisogno di decodificare il JSON e Raccomando usando https://code.google.com/p/json-simple/ è molto semplice

0

Convertire JSONObject in un modulo String e quindi archiviare. E quando il vostro leggere di nuovo, riconvertirlo in JSONObject come di seguito:

 JSONObject obj = new JSONObject(stringRepresentationOfJSON); 
-2

cambiamento hibernate-mapping come questo

nome della proprietà name = tipo "managementVlan" = "stringa" colonna = "ManagementVlan "lunghezza =" 65535" proprietà

Cambia tipo di testo in db

alter tabella EMPLOYEE modificare il testo ManagementVlan;

conver JSON a stringa

String finalVlanTrunk = managementVlanJsonArray.toString();

impostare il valore e salvare;

Problemi correlati