Как передать аргументы как CLOB в mybatis при использовании функций оракула? - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь поместить длинный WKT (длинную строку о географической информации) в пространственную функцию оракула SDO_GEOMETRY, чтобы преобразовать WKT в тип геометрии оракула, используя mybatis. В базе данных нет столбца, в котором хранится WKT, он используется только в качестве параметра в указанной функции. Тип java элемента: String, когда я пытаюсь вставить его, он возвращает ошибку, говоря String слишком долго. Это указывает на то, что строка не превращается в CLOB. Как мне это сделать?

Я пытался использовать это в начале файла mybatis .xml:

<resultMap type="example.Building" id="BaseResultMap">
        <result property="geom" column="geom" jdbcType="CLOB"
                javaType = "java.lang.String"  typeHandler ="example.Utils.OracleClobTypeHandler"/>
    </resultMap>

и у меня настроен класс OracleClobTypeHandler.

Я также пытался использовать #{wkt,jdbcType=CLOB}, но это ни к чему не привело.

РЕДАКТИРОВАТЬ: Это SetParameter метод в OracleClobTypeHandler:

    @Override
    public void setParameter(PreparedStatement arg0, int arg1, Object arg2, JdbcType arg3) throws SQLException {
        CLOB clob = CLOB.getEmptyCLOB();
        clob.setString(1, (String) arg2);
        arg0.setClob(arg1, clob);
    }

1 Ответ

0 голосов
/ 30 мая 2019

<resultMap /> не имеет значения, так как используется при отображении результата запроса в объект Java.
Попробуйте указать typeHandler в ссылке на параметр. например,
#{wkt,typeHandler=example.Utils.OracleClobTypeHandler}

Обратите внимание, что если обработчик типа является внутренним классом Utils, вместо него должна использоваться ссылка example.Utils$OracleClobTypeHandler.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...