我正在做一个项目,使用Quarkus与Panache和PostgreSQL,我试图将JSON数据存储为数据库中的JSONB。然而,当我将JSON数据插入数据库时,它会被转义,我想存储它而不转义,以便能够从postgress查询JSON。
下面是插入JSON数据的代码:
JsonObject jsonObject = Json.createObjectBuilder()
.add("name", "John")
.add("age", 30)
.add("city", "New York")
.build();
String jsonString = jsonObject.toString(); // Convert JsonObject to JSON String
return update("update OfferEntity o set o.items = ?1", jsonString).onItem().transform(ignored -> offer);
字符串
然而,在PostgreSQL数据库中,插入的字段看起来像这样:
"{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"
型
我希望它被存储为:
{"name":"John","age":30,"city":"New York"}
型
这是我的OfferEntity的实体类:
@Entity
@Table(name = "offering")
@Cacheable
@WithSession
public class OfferEntity extends PanacheEntityBase {
@JdbcTypeCode(SqlTypes.JSON)
@Column(name = "items", columnDefinition = "jsonb", insertable = false, updatable = false)
private String items;
public String getItems() {
return items;
}
public void setItems(String items) {
this.items = items;
}
}
型
我正在使用最新的Panache依赖项。我如何修改我的代码或配置以在PostgreSQL中将JSON数据存储为JSONB而不转义它?请注意,即使它们被转义存储,框架也可以从数据库中读取值,但我也想用查询搜索它们,因为JSON被所有这些转义破坏了,这是不可能的
更新
我也尝试了以下情况,但结果是一样的,我得到的值在数据库中,
"{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"
型
我先试了这个
public class Item implements Serializable {
private String name;
private int age;
private String city;//with getters setters
}
型
OfferEntity类看起来像这样
@JdbcTypeCode(SqlTypes.JSON)
@Column(name = "items", columnDefinition = "jsonb", insertable = false, updatable = false)
private Item items;
public Item getItems() {
return items;
}
public void setItems(Item items) {
this.items = items;
}
型
我还试着把物品做成Map
@JdbcTypeCode(SqlTypes.JSON)
@Column(name = "items", columnDefinition = "jsonb", insertable = false, updatable = false)
private Map<String, String> items;
public Map<String, String> getItems() {
return items;
}
public void setItems(Map<String, String> items) {
this.items = items;
}
型
这是一个休眠错误吗?我使用的版本是6.2.7 final
3条答案
按热度按时间dz6r00yl1#
我认为hibernate不支持字符串doc作为标准Map,尝试
字符串
或者创建自己的POJO类
的数据
参考本文档
更新日期:
有关使用
io.vertx.core.json.JsonObject
的休眠响应,请参阅此postqlzsbp2j2#
你可以试试
字符串
被
型
pwuypxnk3#
我认为如果类型是
JSONObject
而不是String
,这应该可以工作。