Зажигать сквозную запись с помощью конвертации данных Postgres - PullRequest
0 голосов
/ 13 сентября 2018

Я настраиваю 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>

Это хорошо подходит для чтения. Мой вопрос: как преобразовать его обратно в действительный тип данных Postgres, когда я сохраняю данные обратно в БД через Wright-через? В трансформаторе нет метода setColumnValue. Только getColumnValue. Спасибо!

1 Ответ

0 голосов
/ 13 сентября 2018

Я не думаю, что вы должны использовать CacheJdbcPojoStore в этом случае.Просто создайте собственную реализацию интерфейса CacheStore и выполните все необходимые преобразования там.

...