You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Aaron Daubman (Updated) (JIRA)" <ji...@apache.org> on 2012/04/06 06:17:19 UTC
[jira] [Updated] (CAMEL-5143) Add a new camel-mybatis statementType
of 'InsertList' (similar to SelectOne versus SelectList) to allow for
mybatis foreach driven batch insert statements
[ https://issues.apache.org/jira/browse/CAMEL-5143?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Aaron Daubman updated CAMEL-5143:
---------------------------------
Patch Info: Patch Available
> Add a new camel-mybatis statementType of 'InsertList' (similar to SelectOne versus SelectList) to allow for mybatis foreach driven batch insert statements
> ----------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-5143
> URL: https://issues.apache.org/jira/browse/CAMEL-5143
> Project: Camel
> Issue Type: Improvement
> Components: camel-mybatis
> Affects Versions: 2.10.0
> Reporter: Aaron Daubman
> Priority: Minor
> Labels: batch, foreach, insert, mybatis
> Fix For: 2.10.0
>
> Original Estimate: 2h
> Remaining Estimate: 2h
>
> The camel-mybatis code will iterate over any list passed in and attempt to insert each item individually, bypassing foreach support in statements like:
> <insert id="batchInsertdataCore" parameterType="java.util.List">
> INSERT INTO CORE_DATA (
> <include refid="dataCoreColumns"/>
> )
> VALUES (
> <foreach item="dataCore" collection="_parameter" open="" close="" separator="),(">
> #{dataCore.event_id}, #{dataCore.start_time_val}, #{dataCore.end_time_val}
> </foreach>
> )
> </insert>
> This results in mybatis generating the following error even when the route is receiving a list of objects as desired:
> ### Error updating database. Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression '_parameter'. Return value (dataCore{
> event_id=111222333,
> start_time_val=Thu Mar 01 02:03:04 EST 2001,
> end_time_val=Thu Mar 01 02:03:05 EST 2001,
> }
> ) was not iterable.
> ### The error may exist in mybatis/dataCore.xml
> ### The error may involve dataCore.batchInsertdataCore
> ### The error occurred while executing an update
> ---from camel/trunk/components/camel-mybatis/src/main/java/org/apache/camel/component/mybatis/MyBatisProducer.java ---
> private void doInsert(Exchange exchange) throws Exception {
> SqlSessionFactory client = endpoint.getSqlSessionFactory();
> SqlSession session = client.openSession();
> try {
> Object result;
> Object in = exchange.getIn().getBody();
> if (in != null) {
> // lets handle arrays or collections of objects
> Iterator<?> iter = ObjectHelper.createIterator(in);
> while (iter.hasNext()) {
> Object value = iter.next();
> LOG.trace("Inserting: {} using statement: {}", value, statement);
> result = session.insert(statement, value);
> doProcessResult(exchange, result);
> }
> } else {
> LOG.trace("Inserting using statement: {}", statement);
> result = session.insert(statement);
> doProcessResult(exchange, result);
> }
> } finally {
> session.commit();
> session.close();
> }
> }
> ---from camel/trunk/components/camel-mybatis/src/main/java/org/apache/camel/component/mybatis/MyBatisProducer.java ---
> It should be simple to add a new statementType = 'InsertList' (similar to SelectOne versus SelectList) and add it to the switch statement further up in the MyBatisProducer.java code.
> Then a new doInsertBatch would be created, copying the code above and just emoving the iterator related code, simply calling:
> result = session.insert(statement, in);
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira