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