Map的实体<string,object =“”>

时间:2015-06-09 20:47:44

标签: java hibernate jpa

我想澄清是否可以通过Hibernate从JPA实体创建Map<String, Object>。我的意思是可以将持久对象(实体)转换为包含所有实体属性作为键和属性值作为值的Map。我知道可以通过Reflections检索属性,但我无法弄清楚如何使用正确的值来映射它。我发现只有一个解决方案,它是使用Spring的JdbcTemplate,但在我的情况下它不是一个选项。如果有人有可能的解决方案,请告诉我。提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您的实体遵循其所有属性的JavaBean命名约定,则可以在Apache BeanUtil库的帮助下通过反射访问属性。

第一步:将您的实体包裹在WrapDynaBean对象中。

第二步:创建一个DynaBeanPropertyMapDecorator,进一步包装DynaBean。

第三步:嗯,就是这样。 DynaBeanPropertyMapDecorator执行Map<String, Object>所以你的工作就在那里完成。 getFoo()现在可以找到原始对象上的decorator.get("foo")。 (请注意,您已经失去了类型安全性,但是确实要求Map<String, Object> ...)

答案 1 :(得分: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);
}