2015-04-01 32 views
1

我正在使用postgresql,我的一個列的類型爲json更新json類型的列值失敗,出現異常

我正在使用REST API,我得到的響應是一個json字符串,我將其存儲在那個json列中。

使用Hibernate,我無法對此列進行更新。

注意:我使用google Gson使它成爲一個JSON並將其存儲到數據庫。

例子:

Gson gson = new Gson(); 
myBean.setJsonData(gson.toJson(response)); 
myHomeDao.attachDirty(myBean); //Error Here 

LOG:

Caused by: org.postgresql.util.PSQLException: ERROR: column json_data" is of type json but expression is of type bytea 
    Hint: You will need to rewrite or cast the expression. 
    Position: 247 
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2198) 
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1927) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:561) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:419) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:365) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208) 
    ... 16 more 
+0

發佈myHomeDao.attachDirty代碼請 – 2015-04-01 13:17:49

+0

這是自動生成的hibernate代碼生成過程,並且對其他列工作正常。代碼 - 'Transaction trans = sessionFactory.getCurrentSession()。beginTransaction(); \t \t \t sessionFactory.getCurrentSession()。saveOrUpdate(instance); \t \t \t \t trans.commit();' – 2015-04-01 13:20:55

回答

1

它看起來像從Postgre的錯誤,我發現這個workaround,你可以用它來也許您解決問題。

如果沒有幫助,也許您需要編寫一個定製的hibernate tybe,它使用jdbc驅動程序上的setObject方法而不是使用文本或字節。

希望它有幫助!

+0

我認爲你是對的,雖然看起來很奇怪,像Postgre這樣的數據庫可能會有這樣的錯誤,當你只需要存儲一個JSON,而你無法在正常的休眠方式然後寫一個自定義查詢。無論如何,我發現黑客寫一個更新查詢,而不是saveOrUpdate默認的休眠方式工作。 – 2015-04-02 13:20:57

+0

@MyGod,是的,它真的很奇怪,我四處尋找解決方案,並沒有像糾正錯誤,需要做解決方法,無論如何,我很樂意幫助! – 2015-04-02 13:23:28

相關問題