2015-06-09 4 views
0

Я хотел бы уточнить, можно ли создать Map<String, Object> из объекта JPA через Hibernate. Я имею в виду, что можно преобразовать постоянный объект (сущность) в Map, который содержит все свойства сущности в качестве ключей и значений свойств в качестве значений. Я понимаю, что свойства могут быть получены через Reflections, но я не могу понять, как сопоставить его с правильными значениями. Я нашел только одно решение и использовать Spring JdbcTemplate, но это не вариант в моем случае. Если у кого-нибудь есть возможное решение, пожалуйста, дайте мне знать. Заранее спасибо.Сущность на карту <String, Object>

ответ

1

Вы можете получить доступ к свойствам посредством отражения при помощи библиотеки Apache BeanUtil, если ваша сущность соответствует соглашениям об именах JavaBean для всех своих свойств.

Шаг первый: оберните свою сущность в объект WrapDynaBean.

Шаг второй: создайте DynaBeanPropertyMapDecorator, дополнительно обернув DynaBean.

Шаг третий: Ну, вот и все. DynaBeanPropertyMapDecorator implmements Map<String, Object> так что ваша работа там делается. getFoo() на ваш первоначальный объект теперь может быть найден decorator.get("foo"). (Обратите внимание, что вы потеряли безопасность типов, но вы сделали попросить Map<String, Object> ...)

+0

Спасибо. Звучит прекрасно, и я попробую. – aime

1

Вы можете попробовать использовать @Converter следующего

@Entity 
public class SomeEntity{ 
    @Id 
    //... 
    @Convert(converter = MyConverter.class) 
    Map<String,Object> map; 
} 

и создать свой преобразователь, как вы хотите, например, преобразовать в/из json

@Converter 
public class MyConverter implements 
AttributeConverter<Map<String, Object>, String> { 

@Override 
public String convertToDatabaseColumn(Map<String, Object> map) { 
     return jsonStr(map); 
} 
@Override 
public Map<String, Object> convertToEntityAttribute(String s) { 
    return mapFromJson(s); 
} 
Смежные вопросы