Я настраиваю 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
. Спасибо!