You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Fred Janon <fj...@yahoo.com> on 2006/07/31 04:46:21 UTC
Re-Post:: Same Connection Guaranteed during a Transaction?
Sorry for the repost, but I am atill looking for an answer to my
question. Basically I need to do an INSERT and get the ID (PK) of the
insert in mySQL. MySQL has the "last_insert_id()" function to do that
but it has to be executed in the same connection as the INSERT,
otherwise it returns 0. I have 2 mapped statements in my XML maps, one
to do the insert and one to do the last_insert_id(). I need to find a
way to execute them in the same connection. I tried to include the 2
stements in a transaction but they are still executed in 2 connections.
Thanks,
Fred
--- Fred Janon <fj...@yahoo.com> wrote:
> I am trying to get the last_insert_id() in mySQL after an insert. I
> read
> in a forum that during a transaction, the same connection was
> guaranteed
> to be used for the duration of the transaction. That's not my
> experience
> using Spring and iBatis 1.3.1. Using the code below, I get 2
> different
> connection ids. I am a bit lost with the concept of a transaction if
> the
> connection is not maintained.
>
> Any comments?
>
> Thanks
>
> Fred
>
> getSqlMap().startTransaction();
> connectionId =
>
(Integer)getSqlMapTemplate().executeQueryForObject("ConnectionId",null);
> System.out.println("iBatisTasks createTask connectionId: " +
> connectionId);
>
> getSqlMapTemplate().executeUpdate("createTask", task);
>
> Integer taskId = new Integer(0);
> taskId =
>
(Integer)getSqlMapTemplate().executeQueryForObject("lastTaskId",null);
> System.out.println(">>>>>>>>>> iBatisTasks createTask id: " +
> taskId);
>
> connectionId =
>
(Integer)getSqlMapTemplate().executeQueryForObject("ConnectionId",null);
> System.out.println("iBatisTasks createTask connectionId: " +
> connectionId);
>
> getSqlMap().commitTransaction();
>
> > begin:vcard
> fn:fjanon
> n:Janon;Fred
> email;internet:fjanon@yahoo.com
> title:Sr S/W Engineer & Architect
> x-mozilla-html:TRUE
> url:http://www.geocities.com/fjanon
> version:2.1
> end:vcard
>
>
Re: Re-Post:: Same Connection Guaranteed during a Transaction?
Posted by Brandon Goodin <br...@gmail.com>.
iBATIS 1.x source code is still available for you to explore. iBATIS 1.x is
no longer supported. You will likely not get any assistance with this issue.
Brandon
On 7/30/06, Fred Janon <fj...@yahoo.com> wrote:
>
> Sorry for the repost, but I am atill looking for an answer to my
> question. Basically I need to do an INSERT and get the ID (PK) of the
> insert in mySQL. MySQL has the "last_insert_id()" function to do that
> but it has to be executed in the same connection as the INSERT,
> otherwise it returns 0. I have 2 mapped statements in my XML maps, one
> to do the insert and one to do the last_insert_id(). I need to find a
> way to execute them in the same connection. I tried to include the 2
> stements in a transaction but they are still executed in 2 connections.
>
> Thanks,
>
> Fred
>
> --- Fred Janon <fj...@yahoo.com> wrote:
>
> > I am trying to get the last_insert_id() in mySQL after an insert. I
> > read
> > in a forum that during a transaction, the same connection was
> > guaranteed
> > to be used for the duration of the transaction. That's not my
> > experience
> > using Spring and iBatis 1.3.1. Using the code below, I get 2
> > different
> > connection ids. I am a bit lost with the concept of a transaction if
> > the
> > connection is not maintained.
> >
> > Any comments?
> >
> > Thanks
> >
> > Fred
> >
> > getSqlMap().startTransaction();
> > connectionId =
> >
> (Integer)getSqlMapTemplate().executeQueryForObject("ConnectionId",null);
> > System.out.println("iBatisTasks createTask connectionId: " +
> > connectionId);
> >
> > getSqlMapTemplate().executeUpdate("createTask", task);
> >
> > Integer taskId = new Integer(0);
> > taskId =
> >
> (Integer)getSqlMapTemplate().executeQueryForObject("lastTaskId",null);
> > System.out.println(">>>>>>>>>> iBatisTasks createTask id: " +
> > taskId);
> >
> > connectionId =
> >
> (Integer)getSqlMapTemplate().executeQueryForObject("ConnectionId",null);
> > System.out.println("iBatisTasks createTask connectionId: " +
> > connectionId);
> >
> > getSqlMap().commitTransaction();
> >
> > > begin:vcard
> > fn:fjanon
> > n:Janon;Fred
> > email;internet:fjanon@yahoo.com
> > title:Sr S/W Engineer & Architect
> > x-mozilla-html:TRUE
> > url:http://www.geocities.com/fjanon
> > version:2.1
> > end:vcard
> >
> >
>
>
Re: Re-Post:: Same Connection Guaranteed during a Transaction?
Posted by Gwyn Evans <gw...@gmail.com>.
Just from the docs, that looks to be solved by the <selectKey>
statements in 2.0 - Is that an option?
/Gwyn
On 31/07/06, Fred Janon <fj...@yahoo.com> wrote:
> Sorry for the repost, but I am atill looking for an answer to my
> question. Basically I need to do an INSERT and get the ID (PK) of the
> insert in mySQL. MySQL has the "last_insert_id()" function to do that
> but it has to be executed in the same connection as the INSERT,
> otherwise it returns 0. I have 2 mapped statements in my XML maps, one
> to do the insert and one to do the last_insert_id(). I need to find a
> way to execute them in the same connection. I tried to include the 2
> stements in a transaction but they are still executed in 2 connections.
>