![](/img/trans.png)
[英]How to save json data in PostgreSQL using jQuery Post and Java?
[英]How to save json Object in postgresql using Hibernate in java?
I have a json object in java and I want to save that Object in PostgreSQL database using hibernate .
我检查了 PostgreSQL 它提供了 json 和 jsonb 数据类型。
但是 hibernate 不提供到这些数据类型的映射,我被卡住了,如何 go 关于它。
I looked quite a bit and found " Persist a JSON Object Using Hibernate " or Custom Types in Hibernate and the @Type Annotation
https://www.baeldung.com/hibernate-persist-json-object
https://www.baeldung.com/hibernate-custom-types
但由于我对 hibernate 很陌生,我不确定这些是否是我需要的,或者 hibernate 确实提供了 json 数据的映射,我只是不知道。
我希望有人可以指导我,因为正确的方法是什么? 谢谢
是的,您将需要一个自定义的 Hibernate 类型,但是, Vlad Mihalcea已经为您完成了,而不是自己创建一个(在此处)。 我也在使用它。
首先,将以下依赖项添加到您的pom.xml
文件中:
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.10.4</version>
</dependency>
之后,您可以定义一个@TypeDef
映射来注册 JSON 类型:
@TypeDefs({
@TypeDef(name = "json", typeClass = JsonStringType.class),
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
@MappedSuperclass
public class BaseEntity {
}
@Entity
@Table(name = "foo")
public class Foo extends BaseEntity {
@Type(type = "jsonb")
@Column(name = "someJsonColumn")
private Map<String, Object> someJsonField = Maps.newHashMap();
}
而已!
在 postgres 中创建一个表
CREATE TABLE demoJson(
id SERIAL NOT NULL PRIMARY KEY,
jsonData JSONB NOT NULL
);
我创建了一个 hibernate 实体 class 作为 DemoJsonEnitity 并定义了 @TypeDefs
@Entity
@Table(name = "demoJson")
@TypeDefs({
@TypeDef(name = "json", typeClass = JsonStringType.class)
,
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
public class DemoJsonEnitity implements Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id")
private int dataId;
@Type(type = "jsonb")
@Column(name = "jsonData", columnDefinition = "jsonb")
private String jsonData;
public int getDataId() {
return dataId;
}
public void setDataId(int dataId) {
this.dataId = dataId;
}
public String getJsonData() {
return jsonData;
}
public void setJsonData(String jsonData) {
this.jsonData = jsonData;
}
}
就是这样。 很简单,我使用了这个依赖
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.9.11</version>
</dependency>
要检查我尝试将数据保存为
public static void main(String arg[]) {
try {
DemoJsonEnitity obj = new DemoJsonEnitity();
JSONObject jsonObj = new JSONObject();
Map m1 = new LinkedHashMap(2);
m1.put("oldValue", "Active");
m1.put("newValue", "InActive");
jsonObj.put("status", m1);
Map m2 = new LinkedHashMap(2);
m2.put("oldValue", "Test 6");
m2.put("newValue", "Test 6 updated");
jsonObj.put("taskDetails", m2);
obj.setJsonData(jsonObj.toString());
Session session = null;
Transaction tx = null;
try {
session = sf.openSession();
tx = session.beginTransaction();
session.save(obj);
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
throw new RuntimeException(e);
} finally {
session.close();
}
} catch (Exception e) {
System.out.println("error: " + e.getMessage());
}
}
Output
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.