如何:Java 与 PostgreSQL 的 json 和 jsonb 数据类型的对象映射

How to: Java object-mapping with PostgreSQL's json and jsonb data types

我尝试使用 Apache Cayenne 映射到我的 PostgreSQL 架构,该架构具有 json 和 jsonb 数据类型。 Apache Cayenne 建模器没有数据类型并更改为 "OTHER"。当我执行 SQL 重新创建数据库(为最大兼容性所必需)时,它抛出了错误。

然后我尝试寻找替代方法,例如 DataNucleus,以映射到 PostgreSQL 的 json 和 jsonb 数据类型,但只发现 Java 驱动程序不支持 PostgreSQL 9.x。 (所以我假设 DataNucleus JPO 不支持 PostgreSQL json 和 jsonb 类型。)

那么,映射到 PostgreSQL 的 json 和 jsonb 并与数据 writing/retrieval 互操作的解决方案是什么 Java基于应用程序?

读写 PostgreSQL JSON 专栏在 Apache Cayenne 中开箱即用。您可以将它们映射为 Java 端的字符串属性。但仅此而已。没有什么特别的魔法。我刚刚使用 GitHub 主版本(Cayenne 4.0)和 PostgreSQL 9.5 Docker 图像尝试了以下操作:

CREATE TABLE json_test (
    id SERIAL,
    x json
);

现在卡宴代码:

ObjectContext context = ...
JsonTest t = context.newObject(JsonTest.class);
t.setX("{\"m\":1}");
context.commitChanges();

List<JsonTest> list =
     ObjectSelect.query(JsonTest.class).select(context);
但是,数据库模式的

"Forward-engineering" 将不起作用,因为 Cayenne 以独立于数据库的方式根据 JDBC 存储其模型,因此没有关于数据库特定类型的信息。