3

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

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

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

4

1 回答 1

4

开箱即用地在 Apache Cayenne 中读取和写入 PostgreSQL JSON 列。您可以将它们映射为 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);

但是,数据库模式的“前向工程”将不起作用,因为 Cayenne 以独立于 DB 的方式根据 JDBC 存储其模型,因此没有关于特定于 DB 的类型的信息。

于 2016-08-30T11:17:09.253 回答