I'm trying to map a Resource class which has a Map field using Data JDBC. Here is simplified entity:
public class Resource {
@Id
private Long id;
private Map<String, String> props;
}
I don't want a separate table for props, just a single column of type string or may be jsonb for postgres.
I did register converters for the map type like this:
@Configuration
public class DataJdbcConfiguration extends AbstractJdbcConfiguration {
@Override
public JdbcCustomConversions jdbcCustomConversions() {
return new JdbcCustomConversions(Arrays.asList(
JsonToStringConverter.INSTANCE,
StringToJsonConverter.INSTANCE)
);
}
@ReadingConverter
enum JsonToStringConverter implements Converter<String, Map<String, String>> {
INSTANCE;
@Override
public Map<String, String> convert(String source) {
try {
return new ObjectMapper().readValue(source, new TypeReference<Map<String, String>>() {
});
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}
@WritingConverter
enum StringToJsonConverter implements Converter<Map<String, String>, String> {
INSTANCE;
@Override
public String convert(Map<String, String> source) {
try {
return new ObjectMapper().writeValueAsString(source);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return "";
}
}
}
Inserts are working fine but a findAll
query on the repository throws org.springframework.data.mapping.MappingException: Couldn't find PersistentEntity for type class java.lang.String!