2013-04-05 128 views
5

我的情況如下。我有三個outputtexts &相應inputtexts JSF表單可以說:如何將json對象存儲到休眠數據庫字段

outputtext1 - inputtext1

outputtext2 - inputtext2

outputtext3 - inputtext3

目前我使用的backbean方法 '保存'爲了將它們存儲到數據庫(hibernate對象可以說table1與主鍵table1.id)到字段table1.field1,table1.field2,table1.field3中。

因此表中的每個記錄都有插入到輸入文本中的值。

我的問題是我應該如何去到存儲表單數據在數據庫,在形式類似如下:

{ 「outputtext1:inputtext1」, 「outputtext2:inputtext2」「outputtext3:inputtext3 「}

然後再次獲取它們,解析並重新生成表單。我正在考慮將表單數據作爲JSON對象來操作......但是我對Java + JSON都是新手,所以一些指導對我來說真的很有用!

這是一個指示性的例子,表單將通過動態創建,並在飛行中創建。

+0

這只是一個字符串,使用'varchar'。使用JSON序列化程序。 – 2013-04-05 14:24:54

+0

所以我在正確的方向如何操作表單數據?表單將是動態的,所以沒有標準格式的表單數據。 – thanili 2013-04-05 14:38:23

+0

如果沒有標準格式,那麼我假設您正在生成JSON字符串。一旦擁有它,將其存儲在varchar字段中。 – 2013-04-05 14:46:31

回答

4

爲什麼要序列化/反序列化一個JSON直接發送到數據庫?反序列化有它自己的問題和多個反序列化可能(不是)是問題的來源。

您應該將字段保存爲來自給定實體的屬性,然後在像Gson這樣的庫的幫助下,從實體生成JSON。


更新

由於您的形式是動態的,你可以使用一些適應實體結構來保存數據。

您的實體可以具有Map<String,String>屬性或包含鍵 - 值對的實體的集合,例如FieldRecord實體。

我建議這樣做,因爲數據庫中的JSON可能會導致複雜的問題,特別是如果您以後必須查詢該數據。 YOu必須處理JSON,以便報告或查找哪些記錄具有特定的字段。這只是一個例子,事情會變得更加複雜。

+0

表格將會是動態的,所以我不會有標準的數字或類型的輸入字段。這只是一個指示性的例子! – thanili 2013-04-05 14:36:39

+0

@thanili你可以擁有一個帶有「Map '或者關聯實體列表的實體。 IMO在數據庫中存儲JSON可能非常難以處理,特別是如果您想稍後查詢特定字段。儘管如此,如果您使用json,只需創建它並將其存儲到VARCHAR變量中即可。 – Gamb 2013-04-05 14:42:33

+0

OK Gamb,我會檢查你的建議,以更簡單的方式。事實上,我將不得不查詢數據庫以獲取已重新加載的表單的已提交值。所以我想我將不得不抓取JSON對象,反序列化它,解析它,將它與表單字段ID進行比較並重新構造表單:)它聽起來太麻煩了...... – thanili 2013-04-05 15:08:39

0

JSONObject轉換成String表格然後存儲。 當你讀回,將其轉換回JSONObject象下面這樣:

 JSONObject obj = new JSONObject(stringRepresentationOfJSON); 
-2

變化冬眠,這樣的映射

屬性名=「managementVlan」類型=「字符串」 列名=「ManagementVlan 「長度=」 65535" 屬性

更改類型,以分貝文本

ALTER TABLE EMPLOYEE修改ManagementVlan文本;

CONVER JSON來字符串

字符串finalVlanTrunk = managementVlanJsonArray.toString();

設置值並保存;

相關問題