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

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);

ただし、データベース スキーマの「フォワード エンジニアリング」は機能しません。Cayenne はそのモデルを JDBC に関して DB に依存しない方法で保存するため、DB 固有のタイプに関する情報がないためです。

于 2016-08-30T11:17:09.253 に答える