Question

J'ai utilisé MyBatis Generator 1.3.1 pour créer un fichier Mapper.xml.Lorsque MyBatis analyse le fichier Mapper, il lance une 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 ne reconnaît pas le champ <#comment>.La partie du XML qu'il analyse est 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 semble avoir analysé le premier commentaire et l'instruction select.Il vient d'analyser un nœud de type #text, mais je ne sais pas d'où vient le #comment.

Je n'ai pas modifié le fichier généré, et je suis étonné que cela ait fonctionné correctement dans le passé et que cela se soit arrêté soudainement.


EDIT: 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>

Et voici la clause example_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>
Était-ce utile?

La solution

J'ai compris ce qui a causé ce problème.(Cela n'avait rien à voir avec le processus de génération mybatis.)

Le problème est survenu lorsque j'ai ajouté un package utilitaire à mon chemin de construction Eclipse, qui comprenait une bibliothèque tierce qui comportait de nombreux anciens paquets.Je soupçonne que le paquet incriminé est un ancien org.apache.xces.Parsers.

J'ai trouvé l'erreur en construisant le projet Eclipse à partir de zéro et en ajoutant des packages et du code, un à la fois.

L'erreur d'exécution (élément inconnu <#Comment> dans l'instruction SQL) pourrait être reproduit en ajoutant le projet et éliminé en supprimant le projet à partir du chemin de construction.

Autres conseils

J'ai le même problème causé par un analyseur XML non standard que je ne peux pas remplacer. J'ai ouvert un problème sur le Gestion des émissions MyBatis et attachéesun patch.J'espère que cela sera corrigé bientôt.

Edit: Comme il s'avère que le problème a été résolu dans R5388.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top