【发布时间】:2020-06-29 13:14:35
【问题描述】:
我正在尝试使用 eclipselink 将 java 对象持久保存到 jsonb 列中的 Postgres 数据库中,但我目前正在编写适当的转换器。任何人都可以帮助我或给我一个使用eclipselink在java中持久化jsonb类型的好例子吗?
这是型号代码:
@Entity
@Table(name = TABLE_NAME)
public class SystemEventModel implements Serializable {
public static final String TABLE_NAME = "system_event";
@Id
@Column(name = "id")
private Long id;
@Lob
@Column(name = "event_data", columnDefinition = "jsonb")
private JsonObject eventData;
public SystemEventModel(JsonObject eventData) {
this.eventData = eventData;
}
}
目前,当我尝试持久化此对象时,我只收到错误“错误:列“event_data”是 jsonb 类型,但表达式是 bytea 类型”。我知道为什么会这样,但是我不知道如何编写转换器,因为我不明白应该将 JsonObject 类型转换为哪种类型才能像 jsonb 一样传递。
这就是我在这个转换器示例中的意思:
@Converter(autoApply = true)
public class AppAttributeTypeAttributeConverter implements AttributeConverter<JsonObject, ???> {
@Override
public ??? convertToDatabaseColumn(JsonObject eventData) {
return ???;
}
@Override
public JsonObject convertToEntityAttribute(??? eventData) {
return ???;
}
}
这里是用于持久化的 sn-p:
String details = "{ \"pressed\": \"yes\", \"isDefault\": \"true\", \"type\": \"BUTTON\"}";
JsonReader jsonReader = Json.createReader(new StringReader(details));
JsonObject jsonObject = jsonReader.readObject();
jsonReader.close();
SystemEventModel eventModel = new SystemEventModel(jsonObject);
em.persist(eventModel);
提前致谢!
【问题讨论】:
标签: java postgresql eclipselink jsonb converters