2011-09-12 8 views
1

私はstore_mapping拡張を実装しましたが、現在はObjectAsStringMappingを使用しています。その結果、データベースから配列の値を読み取ることができますが、挿入や更新によってpostgresqlドライバのエラー "INTEGER []"が "VARCHAR"ではありません。JDO + PostgreSQL配列

JDOでPGSQLアレイを実装する方法はありますか?すべての拡張ポイントでかなり柔軟に見えます。私が実装しなければならない拡張ポイント上のヒントは、感謝、前もって感謝しています!

編集:私は、私は63の可能な値で大丈夫だろうことを考え出した後

私はアレイ用の「代替」としてビットフィールドとしてINT8はpostgresを使用しています。

Sampleクラスは次のようになります。

@PersistenceCapable(detachable="true", table="campaigns") 
public class Campaign implements Serializable { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    public Long id; 

    public List<Integer> regions; 
} 

そして私は、私はリストからjava.sql.Arrayにいくつかのマッピングを実装する必要がありますが、まだそれを行う方法を見つけ出すなかったと思います。私は拡張機能を書いてデフォルトの動作を上書きすることができましたが、拡張ポイントはどのようなものでしょうか?

+0

が、私は同様の問題を持っているあなたのクラス+メタデータ – DataNucleus

+0

を定義なった(多分?)私は、テキスト[]列が含まれているPostgreSQLのテーブルを読みたいです。 String []またはCollection を取得するには、どのようにメタデータを定義する必要がありますか? – Jan

+0

多くの検索とコード掘り出しの後、私は "raw" SQLクエリ(javax.jdo.query.SQL)を使ってこれらのフィールドの "手動"管理を終了しました: 'Query q = pm.newQuery(" q.setResultClass(Map.class); 'ARRAY JDBC型がありますが、いくつかのサポートタイプを追加した後でHibernateだけがそれを処理できるようです。私は多次元配列について話しているわけではありません。何らかの理由で、javaは現時点ではあまりにも遠すぎます。とにかく幸運=) –

答えて

0

マッピングを処理するカスタムフィールドストラテジーを構築する必要があるようです。

この場合、キーはPostgreSQLの配列表現、つまりカンマで区切られた値に変換されます("特殊文字をエスケープするテキストですが、すべての値に使用できます。二重引用符は二重にエスケープされます) 。その後、文字列は、{}の間で括弧で囲まれます。だから、ARRAY[1,2,3]::int[]'{1,2,3}''{"1","2","3"}'

関連する問題