2012-04-21 16 views
9

Necesito ayuda para almacenar un mapa en JPA2, donde las claves y los valores son enums (Map<Enum, Enum>). Con Hibernate como mi proveedor de JPA, almacena las enumeraciones como un blob, pero necesito los datos almacenados como cadenas. Probé los siguientes anotaciones para solucionar este problema:Store Map <Enum, Enum> como String

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

Pero los datos todavía está siendo almacenada en la base de datos como blob. Ha resuelto alguien este problema?

+2

Guardar un mapa como una cadena doesn' suena sensato en absoluto. ¿Has oído hablar de normalización de datos? –

+0

Lo siento, escribo esta pregunta de manera incorrecta, ahora está arreglada, me refiero a las claves y sus valores. – user1289877

+0

Puede usar 'toString()' tanto en las claves como en los valores. ¿Cuál es el problema? –

Respuesta

1

Casi todos y cada objeto de Java tiene un toString() method Si desea representar su mapa en la base de datos, sugiero que esta sea su opción.

Sin embargo, tengo que preguntar ¿está seguro de que es el mapa que desea almacenar y no los elementos de las claves o valores?

+0

Sí, son las claves y sus valores, lo siento, estoy empezando con JPA2 e hibernación, ¿puede publicar aquí los cambios en el código que debo hacer para almacenar estas claves y valores como Cadena? – user1289877

3

@Enumerated se utiliza para definir el tipo de valor. Después de mapas a la mesa donde la columna, tanto para clave y valor se varchars y nombre de la enumeración serán guardados:

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

Producirá más o menos la siguiente tabla:

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

Gracias por su publicación, lo intenté, pero no me ayudó. Yo uso postgresql db e hibernate creo int8, bytea, bytea tipos de datos en la tabla. – user1289877

Cuestiones relacionadas