2016-05-11 97 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。 –