如何将json对象存储到hibernate数据库字段

时间:2013-04-05 14:23:32

标签: java json

我的情况如下。我有一个JSF表单,有三个输出和&相应的输入文件可以说:

outputtext1 - inputtext1

outputtext2 - inputtext2

outputtext3 - inputtext3

目前我使用backbean方法'Save'将它们存储到数据库中(hibernate对象让table1与主键table1.id一起存储)到字段table1.field1,table1.field2,table1.field3。

因此表中的每条记录都在inputtexts中插入了值。

我的问题是如何在数据库中存储表单数据,格式如下:

{“outputtext1:inputtext1”,“outputtext2:inputtext2”。“outputtext3:inputtext3”}

然后再次获取它们,解析并重建表单。我正在考虑将表单数据作为JSON对象进行操作......但我是Java + JSON的新手,所以一些指导对我来说真的很有用!

这是一个指示性示例,表单将通过动态创建并在运行中创建。

4 个答案:

答案 0 :(得分:4)

为什么要序列化/反序列化JSON以将其直接发送到数据库?反序列化有其自身的问题,多个反序列化可以(而不是)成为问题的根源。

您应该将字段保存为给定实体的属性,然后在Gson等库的帮助下,从实体生成JSON。


更新

由于您的表单是动态的,因此您可以使用一些自适应实体结构来保存您的数据。

您的实体可以具有Map<String,String>属性,也可以是包含键值对的FieldRecord个实体的集合。

我建议这样做,因为数据库中的JSON可能会导致复杂的问题,特别是如果您以后必须查询该数据。你必须处理JSON才能报告或查找哪些记录具有特定字段。这只是一个例子,事情会变得更复杂。

答案 1 :(得分:2)

简单,您需要在表中使用BLOB类型列来存储json,当您在java中检索它时,您只需要解码json并使用https://code.google.com/p/json-simple/建议它非常简单

答案 2 :(得分:1)

JSONObject转换为String表单,然后存储。 当您阅读它时,将其转换回JSONObject,如下所示:

       JSONObject obj = new JSONObject(stringRepresentationOfJSON);

答案 3 :(得分:-2)

像这样改变hibernate-mapping  JSONObject obj = new JSONObject(stringRepresentationOfJSON);