通过Postgres后端数据转换点燃直写

时间:2018-09-13 17:58:03

标签: java postgresql ignite

我正在将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个}}。谢谢!

1 个答案:

答案 0 :(得分:0)

在这种情况下,我认为您不应该使用CacheJdbcPojoStore。只需创建自己的CacheStore接口实现,然后在此处进行所有必需的转换即可。