ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From TNO <tno...@free.fr>
Subject [RESOLVED] Re: Problem with multi-select inside a resultMap since Ibatis 2.20 (colored...)
Date Thu, 07 Sep 2006 07:18:52 GMT
This is problem Spring/Ibatis !
By examinig your bean, the only difference was the injection of the
datasource.
I injected it in the DAO and you, in the SqlMapClientFactoryBean

_*BUG :*_
<beans default-lazy-init="true">
  <bean id="sqlMapClientArcDb"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean ">
    <property name="configLocation">
      <value>classpath:arc/db/config/sql-map-config-arcdb.xml</value>
    </property>
  </bean>
...
  <bean id="planDAO" class=" arc.db.auto.dao.ibatis.PlanDAOiBatis"
lazy-init="true">
    <property name="dataSource"><ref bean="dataSourceArc" /></property>
    <property name="sqlMapClient"><ref bean="sqlMapClientArcDb"
/></property>
    <property name="sequenceDAO"><ref bean="sequenceDAO" /></property>
  </bean>
_
*NO BUG :*_
<beans default-lazy-init="true">
  <bean id="sqlMapClientArcDb"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean ">
    <property name="configLocation">
      <value>classpath:arc/db/config/sql-map-config-arcdb.xml</value>
    </property>
    <property name="dataSource"><ref bean="dataSourceArc" /></property>
  </bean>
...
  <bean id="planDAO" class=" arc.db.auto.dao.ibatis.PlanDAOiBatis"
lazy-init="true">
    <property name="sqlMapClient"><ref bean="sqlMapClientArcDb"
/></property>
    <property name="sequenceDAO"><ref bean="sequenceDAO" /></property>
  </bean>


In SqlMapClientFactoryBean  javaDoc :
 * <p>Allows to specify a DataSource at the SqlMapClient level. This is
 * preferable to per-DAO DataSource references, as it allows for lazy
loading
 * and avoids repeated DataSource references.



Thanks a lot Jeff, and longue vie à Ibatis

Thomas

Jeff Butler a écrit :
> I've migrated my test case to Spring, and everything still works OK. 
> Here's my beans.xml:
>  
> <beans>
>   <bean id="dataSource" class="com.ibatis.common.jdbc.SimpleDataSource">
>     <constructor-arg>
>       <map>
>         <entry key="JDBC.Driver" value=" org.hsqldb.jdbcDriver"/>
>         <entry key="JDBC.ConnectionURL" value="jdbc:hsqldb:mem:aname"/>
>         <entry key="JDBC.Username" value="sa"/>
>         <entry key=" JDBC.Password" value=""/>
>         <entry key="JDBC.DefaultAutoCommit" value="false"/>
>         <entry key="Pool.PingQuery" value="SELECT 1"/>
>         <entry key=" Pool.PingEnabled" value="true"/>
>         <entry key="Pool.PingConnectionsOlderThan" value="1000000"/>
>       </map>
>     </constructor-arg>
>   </bean>
>
>   <bean id="sqlMapClient"
>         class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
>     <property name="configLocation">
>       <value>classpath:test/sqlmap/TestSqlMapConfig.xml</value>
>     </property>
>     <property name="dataSource">
>       <ref bean="dataSource"/>
>     </property>
>   </bean>
>
>   <bean id="animalDao" class="test.dao.AnimalDAOImpl">
>     <property name="sqlMapClient">
>       <ref bean="sqlMapClient"/>
>     </property>
>   </bean>
> </beans>
>
> My AnimalDAOImpl class extends Spring's SqlMapClientTemplate.  I'll
> send you the entire test case offline if you're interested.  It works
> with HSQLDB and is just a Java application (no web dependancies).
>  
> Jeff Butler
>
>
>  
> On 9/6/06, *TNO* <tnodev@free.fr <mailto:tnodev@free.fr>> wrote:
>
>     I'm using Spring, Ibatis, and postgreSql 8.0
>     one project call XxxDAO which manage all the DAO (no transaction)
>     one project call XxxMgr which manage every transactions
>
>     So when I lauch my junit test on XxxDAO, there is no transaction
>     manager, only a SimpleDataSource from Ibatis.
>     Here's the db config
>
>     <beans>
>       <bean id="myPropertyConfigurer"
>     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
>         <property name="locations">
>           <list>
>             <value>arc/constante/jdbc.properties</value>
>           </list>
>         </property>
>       </bean>
>       <bean id="dataSourceArc"
>     class="com.ibatis.common.jdbc.SimpleDataSource ">
>         <constructor-arg>
>             <map>
>                 <entry key="JDBC.Driver" value="${jdbc.driverClassName}"/>
>                 <entry key="JDBC.ConnectionURL" value="${ jdbc.url}"/>
>                 <entry key="JDBC.Username" value="${jdbc.username}"/>
>                 <entry key="JDBC.Password" value="${jdbc.password}"/>
>                 <entry key=" JDBC.DefaultAutoCommit"
>     value="${jdbc.defaultAutoCommit}"/>
>                 <entry key="Pool.PingQuery" value="SELECT 1"/>
>                 <entry key="Pool.PingEnabled" value="true"/>
>                 <entry key="Pool.PingConnectionsOlderThan"
>     value="1000000"/>
>             </map>
>         </constructor-arg>
>       </bean>
>
>     </beans>
>
>     Then, I have a big file sql-init-config.xml which contains all my
>     alias for ibatis for each table
>     example :
>       <typeAlias alias="plan" type="arc.db.model.Plan" />
>
>       <resultMap id="planResult" class="plan">
>         <result property="idPlan" column="plan_i_plan" />
>         <result property="idMandat" column="plan_i_mandat" />
>         <result property="infoAssedic" column="plan_t_info_assedic" />
>         <result property="avisControlleur"
>     column="plan_t_avis_controlleur" />
>         <result property="avisRepresentantSalarie"
>     column="plan_t_avis_representant_salarie" />
>         <result property="garantie" column="plan_t_garantie" />
>         <result property="remplacementDirigeant"
>     column="plan_t_remplacement_dirigeant" />
>         <result property="actifSituation"
>     column="plan_t_actif_situation" />
>         <result property="monCumulDeclaration"
>     column="plan_m_cumul_declaration" />
>         <result property="idPlanOptionDef"
>     column="plan_i_plan_option_def" />
>         <result property="idPlanOptionNon"
>     column="plan_i_plan_option_non" />
>         <result property="isPrivi" column="plan_b_privi" />
>         <result property="isChiro" column="plan_b_chiro" />
>         <result property="isConteste" column="plan_b_conteste" />
>         <result property="isProvi" column="plan_b_provi" />
>         <result property="isAechoir" column="plan_b_aechoir" />
>         <result property="isValider" column="plan_b_valider" />
>         <result property="dateProchaineEcheance"
>     column="plan_d_prochaine_echeance" />
>         <result property="isValidationEncours"
>     column="plan_b_validation_encours" />
>         <result property="isEcheancier" column="plan_b_echeancier" />
>         <result property="isReprise" column="plan_b_reprise" />
>       </resultMap>
>
>       <sql id="planColonne">
>         plan.i_plan AS plan_i_plan,
>         plan.i_mandat AS plan_i_mandat,
>         plan.t_info_assedic AS plan_t_info_assedic,
>         plan.t_avis_controlleur AS plan_t_avis_controlleur,
>         plan.t_avis_representant_salarie AS
>     plan_t_avis_representant_salarie,
>         plan.t_garantie AS plan_t_garantie,
>         plan.t_remplacement_dirigeant AS plan_t_remplacement_dirigeant,
>         plan.t_actif_situation AS plan_t_actif_situation,
>         plan.m_cumul_declaration AS plan_m_cumul_declaration,
>         plan.i_plan_option_def AS plan_i_plan_option_def,
>         plan.i_plan_option_non AS plan_i_plan_option_non,
>         plan.b_privi AS plan_b_privi,
>         plan.b_chiro AS plan_b_chiro,
>         plan.b_conteste AS plan_b_conteste,
>         plan.b_provi AS plan_b_provi,
>         plan.b_aechoir AS plan_b_aechoir,
>         plan.b_valider AS plan_b_valider,
>         plan.d_prochaine_echeance AS plan_d_prochaine_echeance,
>         plan.b_validation_encours AS plan_b_validation_encours,
>         plan.b_echeancier AS plan_b_echeancier,
>         plan.b_reprise AS plan_b_reprise
>       </sql>
>
>       <sql id="getPlanSql">
>         SELECT
>         <include refid="planColonne"/>
>         FROM plan
>       </sql>
>
>     Then, one XxxSql.xml for each table which contains my failed query
>
>     <select id="getPlanOptionFromIdPlan" resultMap="planOptionResult">
>         <include refid="getPlanOptionSql"/>
>         WHERE plan_option.i_plan = #id#
>       </select>
>       <select id="getEcheanceOptionFromIdPlan" resultMap="echeanceOptionResult">
>         <include refid="getEcheanceOptionSql"/>
>         WHERE echeance_option.i_plan = #id#
>       </select>
>       <select id="getEcheancePlanFromIdPlan" resultMap="echeancePlanResult">
>         <include refid="getEcheancePlanSql"/>
>         WHERE echeance_plan.i_plan = #id#
>       </select>
>
>       <resultMap id="planResult1N" class="plan" extends="planResult">
>         <result property="listEcheanceOption"
>     select="getEcheanceOptionFromIdPlan" column="plan_i_plan" />
>         <result property="listEcheancePlan"
>     select="getEcheancePlanFromIdPlan" column="plan_i_plan" />
>         <result property="listPlanOption" select="getPlanOptionFromIdPlan"
>     column="plan_i_plan" />
>       </resultMap>
>
>       <select id="getPlan1N" parameterClass="string" resultMap="planResult1N">
>         <include refid="getPlanSql"/>
>         $whereStr$
>       </select>
>
>
>     All xml files are in the sqlMapConfig, but i don't have any
>     transaction manager...
>     <sqlMapConfig>
>       <sqlMap resource="arc/db/config/sql-init-config.xml"/>
>       ...
>       <sqlMap resource="arc/db/auto/dao/ibatis/config/PlanSQL.xml" />
>        ...
>     </sqlMapConfig>
>
>
>     Then, In my Spring application-context, I have
>
>     <beans default-lazy-init="true">
>       <bean id="sqlMapClientArcDb"
>     class="org.springframework.orm.ibatis.SqlMapClientFactoryBean ">
>         <property name="configLocation">
>           <value>classpath:arc/db/config/sql-map-config-arcdb.xml</value>
>         </property>
>       </bean>
>     ...
>       <bean id="planDAO" class=" arc.db.auto.dao.ibatis.PlanDAOiBatis"
>     lazy-init="true">
>         <property name="dataSource"><ref bean="dataSourceArc"
>     /></property>
>         <property name="sqlMapClient"><ref bean="sqlMapClientArcDb"
>     /></property>
>         <property name="sequenceDAO"><ref bean="sequenceDAO" /></property>
>       </bean>
>     ...
>
>     My TestPlanDAOIbatis is a reproductible test case with my own data...
>     I can give you everything if you want to reproduce it !
>
>     thanks, Tom
>
>      
>
> ------------------------------------------------------------------------
>
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.1.405 / Virus Database: 268.12.1/440 - Release Date: 06/09/2006
>   

-- 
Il n'y a pas de mauvais langage, il n'y a que des bons programmeurs


Mime
View raw message