2015-06-09 111 views
0

我想澄清是否可以通過Hibernate從JPA實體創建Map<String, Object>。我的意思是可以將持久對象(實體)轉換爲包含所有實體屬性作爲鍵和屬性值作爲值的映射。我明白,可以通過Reflections檢索屬性,但我無法弄清楚如何使用適當的值映射它。我發現只有一個解決方案,它使用Spring的JdbcTemplate,但在我的情況下它不是一個選項。如果有人有可能的解決方案,請讓我知道。先謝謝你。映射實體<String,Object>

回答

1

如果您的實體遵循其所有屬性的JavaBean命名約定,則可以在Apache BeanUtil庫的幫助下通過反射訪問屬性。

第一步:將您的實體包裝在WrapDynaBean對象中。

第二步:創建一個DynaBeanPropertyMapDecorator,進一步包裝DynaBean。

第三步:就是這樣。 DynaBeanPropertyMapDecorator工具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); 
}