2016-05-11 56 views
0

我有一个非常大的JSON字符串,我需要在数据存储,通过非常大的手段,而不是48000个字符,而我使用SQL服务器来存储在text领域这一数据的SQL Server类型,然后我试着将其更改为nvarchar(max),但似乎仍然没有区别。大型JSON字符串中使用JAVA

正在发生我的字符串的问题,当我在数据库中插入后40000个字符被截断。我使用休眠到的数据存储在该特定列,并将其映射为java.lang.String

以下是我的代码,从对象转换到的JSONObject

public static JSONObject toJSONListWithKey(List<?> object, String key) { 
     JSONObject jsonObject = new JSONObject(); 
     JSONArray jsonArray = new JSONArray(); 
     Gson gson = new Gson(); 
     try { 
      for (Object object2 : object) { 
       jsonArray.put(new JSONObject(gson.toJson(object2))); 
     } 

      if (null != key || !"".equals(key)) { 
       jsonObject.put(key, jsonArray); 
      } else { 
       jsonObject = new JSONObject(jsonArray.toString()); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return jsonObject; 
} 

和下面的是我将其存储在数据库中的方式

JSONObject jsonObject = JSONUtils.toJSONListWithKey(reports,"reports"); 

ins.setReportJson(jsonObject.toString()); 

instanceDAO.update(ins); 

任何人都可以请建议/指引我哪里威力的东西是想错了,我应该采取如果这做法是不正确?

回答

1

您可能需要修改ins映射,所以reportJson列承认较大的字符串,甚至可能将类型更改为TEXT。如果您使用XML文件的映射配置,您可以指定列的类型是这样的:

<property name="reportJson" > 
    <column name="reportJson" sql-type="TEXT"/> 
</property> 

您可能会发现此的其他问题有所帮助:

how to set length of an column in hibernate with maximum length

+0

可以串不能被映射到TEXT数据类型?目前它是这样的:'<属性名= “reportJson” 类型= “字符串”> \t \t \t <列名= “reportJson”/> ' –

+0

默认情况下,字符串被映射为VARCHAR。如果您未指定长度,则可能是默认的长度,不符合您的当前需求。这里描述的您可以与您当前的配置指定:http://stackoverflow.com/questions/3584509/how-to-set-hibernate-mapping-to-allow-for-strings-longer-than-255-characters –

+0

你需要改变的是SQL列的类型,而不是Java类型。它仍然是一个字符串,但在数据库上它将被映射为TEXT。 –