- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于 hibernate 本身不支持 JSONB,因此我实现了自定义类型。我可以毫无问题地从表 ad_my_table 读取数据。但是,在写入时出现数据转换错误。我还尝试使用“hibernate-types”库等第 3 方解决方案,但遇到了同样的错误。
MyTable 实体类 :
import com.sample.console.backend.dao.entity.JsonbUserType;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.GenerationType;
import javax.persistence.SequenceGenerator;
import javax.persistence.Column;
import javax.persistence.Enumerated;
@Entity
@Table(name = "ad_my_table")
@TypeDef(name = "jsonb", typeClass = JsonbUserType.class)
public class CustomClientEntity
{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "my_table_id_seq")
@SequenceGenerator(name = "my_table_id_seq", sequenceName = "ad_my_table_id_seq", allocationSize = 1)
private Long id;
@Column(name = "filename")
private String fileName;
@Column(name = "config", columnDefinition = "jsonb")
@Type(type = "jsonb")
private String config;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public String getFileName()
{
return fileName;
}
public void setFileName(String fileName)
{
this.fileName = fileName;
}
public String getConfig()
{
return config;
}
public void setConfig(String config)
{
this.config = config;
}
}
import org.apache.commons.lang3.StringUtils;
import org.hibernate.usertype.UserType;
import org.postgresql.util.PGobject;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
public class JsonbUserType implements UserType {
public static final String JSONB_TYPE = "jsonb";
@Override
public Class<String> returnedClass() {
return String.class;
}
@Override
public int[] sqlTypes() {
return new int[]{ Types.JAVA_OBJECT };
}
@Override
public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) throws HibernateException, SQLException {
if (names.length <= 0) { return null; }
final String dbData = rs.getString(names[0]);
String result = null;
if (StringUtils.isNotBlank(dbData)) {
String json = dbData.startsWith("\"") ? dbData.substring(1, dbData.length() - 1) : dbData;
result = StringEscapeUtils.unescapeJson(json);
}
return result;
}
@Override
public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSessionContractImplementor session)
throws HibernateException, SQLException {
if (value instanceof String && StringUtils.isNotBlank((String)value))
{
PGobject pgObject = new PGobject();
pgObject.setType(JSONB_TYPE);
pgObject.setValue((String)value);
st.setObject(index, pgObject, Types.OTHER);
}
else {
st.setNull(index, Types.OTHER);
}
}
@Override
public Object deepCopy(Object value) throws HibernateException {
return value;
}
@Override
public boolean isMutable() {
return true;
}
@Override
public boolean equals(Object x, Object y) throws HibernateException {
if(x == null) { return y == null; }
return x.equals(y);
}
@Override
public int hashCode(Object x) throws HibernateException {
assert (x != null);
return x.hashCode();
}
@Override
public Object assemble(Serializable cached, Object owner) throws HibernateException {
return this.deepCopy( cached);
}
@Override
public Serializable disassemble(Object value) throws HibernateException {
return (String)this.deepCopy( value);
}
@Override
public Object replace(Object original, Object target, Object owner) throws HibernateException {
return original;
}
}
import com.sample.console.backend.dao.entity.JsonbUserType;
import org.hibernate.dialect.PostgreSQL10Dialect;
import java.sql.Types;
public class CustomPostgreSQLDialect extends PostgreSQL10Dialect
{
public CustomPostgreSQLDialect() {
super();
registerColumnType(Types.JAVA_OBJECT, JsonbUserType.JSONB_TYPE);
}
}
Caused by: org.h2.jdbc.JdbcSQLDataException: Data conversion error converting "X'aced000...74227d' (AD_MY_TABLE: ""CONFIG"" ""JSONB"")"; SQL statement: insert into ad_my_table (config, filename, id) values (?, ?, ?) [22018-200]
Caused by: org.h2.message.DbException: Data conversion error converting "OTHER to JSON" [22018-200]
最佳答案
使用将 Jsonb 类型创建为 clob 的连接字符串,jdbc:h2:mem:<table>;INIT=create domain if not exists jsonb as CLOB;
.当您在实体中将字段定义为 String 时,这可以正常工作。如果您将 Entity 中的字段定义为 CustomJson 对象,则它仅支持数据库读取操作。
这有效:
@Column(name = "config", columnDefinition = "jsonb")
@Type(type = "jsonb")
private String config;
这不支持读取操作
@Column(name = "config", columnDefinition = "jsonb")
@Type(type = "jsonb")
private MyJsonObject config;
关于string - 与 JSONB 相关的 PostgreSQL Hibernate-types 数据转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62360439/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!