如何:使用PostgreSQL的json和jsonb数据类型进行Java对象映射

时间:2016-08-30 10:28:32

标签: java json postgresql apache-cayenne

我尝试使用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的应用程序的数据写入/检索进行互操作?

1 个答案:

答案 0 :(得分:2)

读取和编写PostgreSQL JSON列在Apache Cayenne中开箱即用。您可以在Java端将它们映射为String属性。但那就是它。没有特别的魔力。我刚刚尝试使用GitHub主版本(Cayenne 4.0)和PostgreSQL 9.5 Docker镜像:

CREATE TABLE json_test (
    id SERIAL,
    x json
);

现在Cayenne代码:

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

List<JsonTest> list =
     ObjectSelect.query(JsonTest.class).select(context);

&#34;正向工程&#34;但是,由于Cayenne以独立于数据库的方式将其模型以JDBC的形式存储,因此数据库模式无法工作,因此没有关于特定于数据库类型的信息。