Pregunta

Usé el generador mybatis 1.3.1 para crear un archivo mapper.xml. Cuando MyBatis analiza el archivo mapper, lanza una construcción de builderException:

Exception in thread "main" org.apache.ibatis.builder.BuilderException: Unknown element <#comment> in SQL statement.
    at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseDynamicTags(XMLStatementBuilder.java:83)
    at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:43)
    at org.apache.ibatis.session.Configuration.parseStatementNodes(Configuration.java:513)
    at org.apache.ibatis.session.Configuration.buildStatementsForNamespace(Configuration.java:502)
    at org.apache.ibatis.session.Configuration.buildStatementsFromId(Configuration.java:467)
    at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:391)
    at org.apache.ibatis.binding.MapperMethod.setupCommandType(MapperMethod.java:160)
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:37)
    at $Proxy1.selectByExample(Unknown Source)

Parsedynamictags no reconoce el campo <#comment>. La parte del XML de que está analizado es selectByExample:

  <select id="selectByExample" resultMap="BaseResultMap" parameterType="test.model.TblPosStageExample" >
    <!--       WARNING - @mbggenerated  ..  -->
    select
    <if test="distinct" >
      distinct
    </if>
    <include refid="Base_Column_List" />
    from tbl_Pos_Stage
    <if test="_parameter != null" >
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null" >
      order by ${orderByClause}
    </if>
  </select>

MyBatis parece haber analizado el primer comentario y la declaración de selección. Acaba de analizar un nodo de tipo #Text, pero no estoy seguro de dónde proviene el #Comment.

No he modificado el archivo generado, y estoy desconcertado de que esto haya funcionado correctamente en el pasado y se haya detenido de repente.


Editar: base_column_list

  <sql id="Base_Column_List" >
    <!--
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Wed Mar 23 08:04:42 EST 2011.
    -->
    SurrogatePK, businessDate, positionId, busAIdCode, {95 columns deleted for brevity}
    marketValueCcy, settledMarketValueCcy
  </sql>

Y aquí está el ejemplo_where_clause

<sql id="Example_Where_Clause" >
  <!--
    WARNING - @mbggenerated
    This element is automatically generated by MyBatis Generator, do not modify.
    This element was generated on Wed Mar 23 08:04:42 EST 2011.
  -->
  <where >
    <foreach collection="oredCriteria" item="criteria" separator="or" >
    <if test="criteria.valid" >
      <trim prefix="(" suffix=")" prefixOverrides="and" >
      <foreach collection="criteria.criteria" item="criterion" >
        <choose >
        <when test="criterion.noValue" >
          and ${criterion.condition}
        </when>
        <when test="criterion.singleValue" >
          and ${criterion.condition} #{criterion.value}
        </when>
        <when test="criterion.betweenValue" >
          and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
        </when>
        <when test="criterion.listValue" >
          and ${criterion.condition}
          <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
          #{listItem}
          </foreach>
        </when>
        </choose>
      </foreach>
      </trim>
    </if>
    </foreach>
  </where>
</sql>
¿Fue útil?

Solución

He descubierto qué causó este problema. (No tenía nada que ver con el proceso de generación mybatis).

El problema ocurrió cuando agregué un paquete de utilidad a mi ruta de construcción de eclipse, que incluía una biblioteca de terceros que tenía muchos paquetes antiguos. Sospecho que el paquete ofensivo es un antiguo org.apache.xerces.parsers.

Encontré el error al construir el proyecto Eclipse desde cero y agregar paquetes y código, uno a la vez.

El error de tiempo de ejecución (elemento desconocido <#comment> en la declaración SQL) podría reproducirse agregando el proyecto y eliminado eliminando el proyecto de la ruta de compilación.

Otros consejos

Tengo el mismo problema causado por un Parser XML no estándar que no puedo reemplazar. He abierto un problema en el Gestión de problemas de mybatis y adjuntó un parche. Espero que esto se solucione pronto.

Editar: Resulta que el problema se ha resuelto en R5388.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top