2012-04-21 9 views
9

JPA2にキーと値の両方が列挙型(Map<Enum, Enum>)のマップを格納するのに助けが必要です。 JPAプロバイダとしてのHibernateでは、enumをblobとして格納しますが、データを文字列として格納する必要があります。私はこの問題を解決するために次の注釈を試しました:しかし、データはまだブロブとしてDBに格納されています。誰かがこの問題を解決しましたか?ストアマップ<Enum, Enum>を文字列として

+2

文字列は」doesnのようなマップを保存しますまったく賢明な音。データの正規化について聞いたことがありますか? –

+0

申し訳ありませんが、私は間違ったやり方でこの質問を書いています。今は固定されています。私は鍵とその値を意味します。 – user1289877

+0

'toString()'をキーと値の両方に使うことができます。どうしたの? –

答えて

1

ほとんどすべてのJavaオブジェクトにはtoString() methodが含まれています。データベースでマップを表現したい場合は、これを選択することをお勧めします。

しかし、キーや値の要素ではなく、保存したいMAPを確認する必要がありますか?

+0

はい、それはキーとその値です。残念ですが、JPA2から始まり、休止状態です。このキーと値をStringとして保存するためにはコードの変更をここに投稿できますか? – user1289877

3

@Enumeratedは、値の型を定義するために使用されます。キーと値の両方のための列が保存されます列挙型のVARCHARが、名前があるテーブルにマップを以下に示します。

@Enumerated(EnumType.STRING) 
@ElementCollection(fetch = FetchType.EAGER) 
@MapKeyEnumerated(value = EnumType.STRING) 
public Map<MyEnum, MyOtherEnum> elementsMap = new HashMap<>(); 

それは大体次の表を生成します:

[NAME_OF_ENTITY]_ELEMENTSMAP (
    NAME_OF_ENTITY_ID INTEGER, 
    ELEMENTSMAP VARCHAR(255), 
    ELEMENTSMAP_KEY VARCHAR(255) 
) 
+0

あなたの記事のおかげで、私はそれを試みたが、私を助けなかった。私はpostgresqlのDBを使用し、休止状態はint8、bytea、byteaデータ型をテーブルに作成します。 – user1289877

関連する問題