2015-04-01 81 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

相关问题