2013-04-05 86 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();

设置值并保存;

相关问题