Domanda

Ho usato Mybatis Generator 1.3.1 per creare un file mapper.xml. Quando mybatis analizza il file mapper, lancia un 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 non sta riconoscendo il campo <#comment>. La parte dell'XML che sta analizza è selezionata Esempio:

  <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 sembra aver analizzato il primo commento e l'istruzione selezionata. Ha appena analizzato un nodo di tipo #Text, ma non sono sicuro da dove provenga #Comment.

Non ho modificato il file generato e sono perplesso che questo abbia funzionato correttamente in passato e si è fermato all'improvviso.


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

Ed ecco l'esempio_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>
È stato utile?

Soluzione

Ho capito cosa ha causato questo problema. (Non aveva nulla a che fare con il processo di generazione di Mybatis.)

Il problema si è verificato quando ho aggiunto un pacchetto di utilità al mio percorso di build Eclipse, che includeva una libreria di terze parti che aveva molti vecchi pacchetti. Sospetto che il pacchetto offensivo sia un vecchio org.apache.xerces.parsers.

Ho trovato l'errore costruendo il progetto Eclipse da zero e aggiungendo pacchetti e codice, uno alla volta.

L'errore di runtime (Element Unknown <#Comment> nell'istruzione SQL) potrebbe essere riprodotto aggiungendo il progetto ed eliminato rimuovendo il progetto dal percorso di build.

Altri suggerimenti

Ho lo stesso problema causato da un parser XML non standard che non posso sostituire. Ho aperto un problema sul Mybatis Gestione dei problemi e attaccato una patch. Spero che questo venga risolto presto.

EDIT: A quanto pare, il problema è stato risolto in R5388.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top