9

キーと値の両方が列挙型 ( ) である JPA2 にマップを格納する際に助けが必要ですMap<Enum, Enum>。JPAプロバイダーとしてHibernateを使用すると、列挙型がblobとして保存されますが、データを文字列として保存する必要があります。この問題を解決するために、次の注釈を試しました。

@ElementCollection(fetch = FetchType.EAGER)
@MapKeyEnumerated(value = EnumType.STRING)
public Map<Enum, Enum> getElementsMap() {
    return elementsMap;
}

しかし、データはまだブロブとして DB に保存されています。誰かがこの問題を解決しましたか?

4

2 に答える 2

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)
)
于 2012-04-21T10:17:50.977 に答える
1

ほとんどすべてのJavaオブジェクトにtoString() method

ただし、キーや値の要素ではなく、保存したい MAP であると確信していますか?

于 2012-04-21T08:55:00.833 に答える