Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新json类型的列值失败,出现异常_Java_Hibernate_Postgresql_Gson_Restlet - Fatal编程技术网

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方法。我的天啊,是的,这真的很奇怪,我四处寻找解决方案,没有什么比纠正错误更好的,需要做些变通,不管怎样,我很高兴能帮上忙!