我正在尝试使用 Data JDBC 映射具有 Map 字段的 Resource 类。这是简化的实体:
public class Resource {
@Id
private Long id;
private Map<String, String> props;
}
我不想要一个单独的道具表,只是一个字符串类型的列,或者可能是 postgres 的 jsonb。
我确实为这样的地图类型注册了转换器:
@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 "";
}
}
}
插入工作正常,但findAll
对存储库的查询抛出org.springframework.data.mapping.MappingException: Couldn't find PersistentEntity for type class java.lang.String!