Java 更新json类型的列值失败,出现异常
我使用的是Java 更新json类型的列值失败,出现异常,java,hibernate,postgresql,gson,restlet,Java,Hibernate,Postgresql,Gson,Restlet,我使用的是postgresql,其中一列的类型是json 我使用的是RESTAPI,得到的响应是一个json字符串,存储在json列中 使用Hibernate,我无法更新此列 注意:我正在使用google Gson将其制作成json并存储到db中 示例: Gson gson = new Gson(); myBean.setJsonData(gson.toJson(response)); myHomeDao.attachDirty(myBean); //Error Here Caused by:
postgresql
,其中一列的类型是json
我使用的是RESTAPI,得到的响应是一个json字符串,存储在json
列中
使用Hibernate,我无法更新此列
注意:我正在使用google Gson
将其制作成json并存储到db中
示例:
Gson gson = new Gson();
myBean.setJsonData(gson.toJson(response));
myHomeDao.attachDirty(myBean); //Error Here
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
日志:
Gson gson = new Gson();
myBean.setJsonData(gson.toJson(response));
myHomeDao.attachDirty(myBean); //Error Here
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
这看起来像是Postgre的一个bug,我发现这个可以用来解决你的问题 如果没有帮助,您可能需要编写一个自定义hibernate tybe,在jdbc驱动程序上使用setObject方法,而不是使用文本或字节
希望有帮助 请发布myHomeDao.attachDirty代码,该代码是由hibernate代码生成过程自动生成的,对于其他列来说工作正常。代码-
Transaction=sessionFactory.getCurrentSession().beginTransaction();sessionFactory.getCurrentSession().saveOrUpdate(实例);trans.commit()
我认为你是对的,尽管像Postgre
这样的数据库可能会有这样的错误,但当你只需要存储一个json时,你发现没有办法以正常的hibernate方式来存储,然后再编写一个自定义查询。不管怎样,我发现了一个写更新查询的方法,而不是saveOrUpdate默认的hibernate方法。我的天啊,是的,这真的很奇怪,我四处寻找解决方案,没有什么比纠正错误更好的,需要做些变通,不管怎样,我很高兴能帮上忙!