2013-04-05 6 views
5

gespeichert wird mein Fall ist der folgende. Ich habe eine JSF Form mit drei outputtexts & die entsprechenden inputtexts können sagen:Wie ein JSON-Objekt in ein Hibernate-Datenbankfeld

outputtext1 - inputtext1

outputtext2 - inputtext2

outputtext3 - inputtext3

Derzeit verwende ich eine backbean Methode 'Speichern' in Um sie in der Datenbank zu speichern (Hibernate-Objekt, sagen wir Table1 mit Primärschlüssel table1.id) in die Felder table1.field1, table1.field2, table1.field3.

Also jeder Datensatz in der Tabelle haben die Werte in die Eingabetexte eingefügt.

Meine Frage ist, wie kann ich in der Datenbank, in einer Form, wie folgt zu speichern Formulardaten gehen:

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

und dann holen Sie sie erneut, analysieren und erstellen Sie das Formular neu. Ich denke darüber nach, Formulardaten als JSON-Objekt zu manipulieren ... Aber ich bin neu sowohl in Java als auch in JSON, daher wäre eine gewisse Anleitung für mich wirklich nützlich!

Dies ist ein indikatives Beispiel, Formular werden von dynamischen und erstellt im laufenden Betrieb.

+0

Es ist nur eine Zeichenfolge, verwenden Sie 'varchar'. Verwenden Sie einen JSON-Serializer. –

+0

Also bin ich in die richtige Richtung, wie man Formulardaten manipuliert? Das Formular wird dynamisch sein, daher gibt es kein Standardformat für Formulardaten. – thanili

+0

Wenn es kein Standardformular gibt, nehme ich an, dass Sie den JSON-String generieren. Sobald Sie es haben, speichern Sie es in einem Varchar-Feld. –

Antwort

4

Warum würden Sie wollen JSON serialisieren/deserialisieren, um es direkt an die Datenbank zu senden? Deserialisierung hat ihre eigenen Probleme und mehrere Deserialisierungen könnte (nicht wird) eine Quelle von Problemen sein.

Sie sollten die Felder als Attribute von einer bestimmten Entität speichern und dann mit Hilfe von Bibliotheken wie Gson den JSON von der Entität generieren.


aktualisieren

Da Ihr Formular dynamisch ist, können Sie einige anpassungsfähige Einheit Struktur verwenden, um Ihre Daten zu halten.

Ihre Entitäten können entweder ein Map<String,String> Attribut oder eine Sammlung von beispielsweise FieldRecord Entitäten haben, die ein Schlüssel/Wert-Paar enthalten.

Ich schlage das vor, weil ein JSON in der Datenbank zu komplexen Problemen führen kann, insbesondere wenn Sie diese Daten später abfragen müssen. Sie müssen die JSONs verarbeiten, um entweder zu berichten oder zu finden, welche Datensätze ein bestimmtes Feld haben. Dies ist nur ein Beispiel, Dinge können komplexer werden.

+0

Das Formular wird dynamisch sein, also werde ich keine Standardnummer oder Art von Eingabefeldern haben. Dies ist nur ein Beispiel! – thanili

+0

@thanili Sie können eine Entität mit einer 'Map ' oder einer Liste von Assoziationsentitäten haben. IMO Das Speichern eines JSON in der Datenbank kann sehr schwierig sein, insbesondere wenn Sie später bestimmte Felder abfragen möchten. Wenn Sie jedoch ein json verwenden möchten, erstellen Sie es einfach und speichern Sie es in einer VARCHAR-Variablen. – Gamb

+0

OK Gamb, ich werde Ihren Vorschlag für einen einfacheren Weg überprüfen. In der Tat müsste ich die Datenbank abfragen, um bereits übergebene Werte für Formulare zu holen, die neu geladen werden. Also ich denke, ich muss JSON-Objekt abholen, deserialisieren, parsen, mit Formularfeld-IDs vergleichen und das Formular wiederherstellen :) Es hört sich zu sehr an ... – thanili

0

Einfach, benötigen Sie einen BLOB-Typ Spalte in der Tabelle, die die json zu speichern und wenn Sie es in Java abrufen müssen Sie nur das json entschlüsseln und i recomend mit https://code.google.com/p/json-simple/ seiner sehr einfachen

0

In ein String Formular JSONObject konvertieren und dann speichern. Und wenn Ihr es sie in JSONObject wie unten lesen zurück, zurück konvertieren:

 JSONObject obj = new JSONObject(stringRepresentationOfJSON); 
-2

Änderung wie diese Hibernate-Mapping

property name = "managementVlan" type = "string" Spalte name = "ManagementVlan "length =" 65535" Eigenschaft

Typ ändern in db

alter table EMPLOYEE ändern ManagementVlan Text Text;

conver Json zu String

String finalVlanTrunk = managementVlanJsonArray.toString();

den Wert einstellen und speichern;