我正在将Apache Ignite和Postgres设置为持久存储。在postgres中,我具有JSON和Array列,因此我实现了自定义转换器,以将所有非原始的内容都转换为JSON字符串。 这是代码:
public class PostgresTransformer extends JdbcTypesDefaultTransformer {
@Override
public Object getColumnValue(ResultSet rs, int colIdx, Class<?> type) throws SQLException {
if (type == ArrayOfFloat.class) {
Array raw = rs.getArray(colIdx);
ArrayOfFloat obj = new ArrayOfFloat(raw);
return obj.toString();
}
if (type == ArrayOfInt.class) {
Array raw = rs.getArray(colIdx);
ArrayOfInt obj = new ArrayOfInt(raw);
return obj.toString();
}
if (type == ArrayOfString.class) {
Array raw = rs.getArray(colIdx);
ArrayOfString obj = new ArrayOfString(raw);
return obj.toString();
}
if (type == JSON.class) {
String raw = rs.getString(colIdx);
JSON obj = new JSON(raw);
return obj.toString();
}
return super.getColumnValue(rs, colIdx, type);
}
}
在main-server.xml
中,我还使用了以下相应配置:
<property name="transformer">
<bean class="com.mycorp.ignite.transformers.PostgresTransformer"/>
</property>
<bean class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">
<constructor-arg>
<util:constant static-field="java.sql.Types.OTHER"/>
</constructor-arg>
<constructor-arg value="neighbourhood_stats"/>
<constructor-arg value="com.mycorp.ignite.types.JSON"/>
<constructor-arg value="neighbourhoodStats"/>
</bean>
这对我来说通读很有效。我的问题是:当我通过Wright-through将数据保存回DB时,如何将其转换回有效的Postgres数据类型?变压器中没有setColumnValue
方法。只有1个}}。谢谢!
答案 0 :(得分:0)
在这种情况下,我认为您不应该使用CacheJdbcPojoStore
。只需创建自己的CacheStore
接口实现,然后在此处进行所有必需的转换即可。