I hooked up pgsql to the jgamestore app and ran the unit test against the following sql map. It worked fine and populated the id just fine. I think the key is to specify your jdbc types in the mapping (#myInteger:INTEGER#).
<insert id="insert" parameterClass="Category"> <selectKey keyProperty="categoryId" resultClass="integer"> SELECT nextval('global_seq') </selectKey> INSERT INTO CATEGORY ( categoryId, title, description, parentCategoryId, leftNode, rightNode, sequence, ancestorTree ) VALUES( #categoryId:INTEGER#, #title:VARCHAR#, #description:VARCHAR#, #parentCategoryId:INTEGER#, #leftNode:INTEGER#, #rightNode:INTEGER#, #sequence:INTEGER#, #ancestorTree:VARCHAR# ) </insert> Brandon On 5/1/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > Hi, > Unfortunately, It still doesn't work. After many of combinations I forgot to > put it, but it doesn't change anything at all. > > > The selectKey will simply retrieve the id and populate the addressId > >in your Customer object. It is then your responsibility to insert the > >proper id along with your insert. > > Exactly. So when I put the <selectKey>..</selectKey> statement. While > invocation it should be executed > exactly in the order pointed by positions/statements in <insert>..</insert>. > So if I put property addressId into insert clause or not, it should be > populated first???? > > So First property addressId should be populated (I should see it in database > log file, but i cannot, see below). It still isn't executed. > Then insert should do the rest with correctly addressId populated. > The other way is to do insert ( from sequence) and catch inserted id with > <selectKey> using currval instead of nextval after inserting record into > table. > It also isn't executed. > > Maybe there is a problem between that, the database column addr_id is type of > integer, and my resultClass is int (bean has Integer property). But I also > tried resultClass as resultClass="integer". Nothing changed. > > Then I relised that the addressId is set to 0 (by struts), and It coulbe the > problem, that SelectKey maybe is executed when > property is null (I removed it from form, so it was null). But It also didn't > changed anything > > At the end of mail, ther's a mention about failure of updating id column: > "Failed to update - id [insertCustomerNew] - parameterObject ..." > Why addressId isn't mentioned. I also have id column which is extended from > ObjectData, but it doesn't seem to be populated. > > I still hope, You can help me > > Darek > > <insert id="insertCustomerNew" parameterClass="customer"> > <selectKey resultClass="int" keyProperty="addressId"> > select nextval('public.addresses_addr_id_seq'::text) > </selectKey> > INSERT INTO ADDRESSES ( > ADDR_ID > ,STREET > ,PLACENO > ,FLATNO > ,CITY > ,ZIP > ,C_STREET > ,C_PLACENO > ,C_FLATNO > ,C_CITY > ,C_ZIP > ) > VALUES ( > #addressId# > ,#addressStreet# > ,#addressPlaceNo# > ,#addressFlatNo# > ,#addressCity# > ,#addressPostalCode# > ,#addressCstreet# > ,#addressCplaceNo# > ,#addressCflatNo# > ,#addressCcity# > ,#addressCpostalCode# > ) > </insert> > > Bean of customerData known as customer parameter Class > public class CustomerData extends ObjectData { > > private Integer stateId; > private Integer compId; > > private Integer addressId; > .... > > public Integer getAddressId() { > System.out.println("getaddressId" + addressId); > return addressId; > } > > public void setAddressId(Integer addressId) { > System.out.println("setaddressId" + addressId.intValue()); > this.addressId = addressId; > } > > } > > # \d addresses ; > Table "public.addresses" > Column | Type | Modifiers > -----------+-----------------------+----------- > addr_id | integer | not null > street | character varying(64) | not null > placeno | character varying(15) | not null > flatno | character varying(5) | not null > city | character varying(30) | not null > zip | character(6) | not null > c_street | character varying(64) | > c_placeno | character varying(15) | > c_flatno | character varying(5) | not null > c_city | character varying(30) | > c_zip | character(6) | > Indexes: addr_pk primary key btree (addr_id) > Check constraints: "check_zip" (zip ~ '^[0-9]{2}-[0-9]{3}$'::text) > > Log from database > > with jdbc driver 8.0311 > > enfo_id IN > ( > SELECT enfo_id > FROM entry_forms e > WHERE not exists (select 1 FROM given_entry_skills ges WHERE > enfo_id = e.enfo_id) ) > ) > --------------------------- HERE ------------------------------- > 2005-05-01 13:29:52 CEST LOG: statement: INSERT INTO ADDRESSES ( > ADDR_ID ,STREET ,PLACENO ,FLATNO ,CITY ,ZIP > ,C_STREET ,C_PLACENO ,C_FLATNO ,C_CITY ,C_ZIP > ) VALUES( $1 ,$2 ,$3 ,$4 ,$5 ,$6 > ,$7 ,$8 ,$9 ,$10 ,$11 ) > ---------------------------------------------------------- > 2005-05-01 13:29:52 CEST ERROR: duplicate key violates unique constraint > "addr_pk" > 2005-05-01 13:29:52 CEST LOG: statement: SELECT * FROM states > ORDER BY name ASC > 2005-05-01 13:29:52 CEST LOG: statement: SELECT * FROM COMPANIES > ORDER BY name ASC > > with jdbc driver 7.4 build 215 > ------------------------------- > > SELECT enfo_id > FROM entry_forms e > WHERE not exists (select 1 FROM given_entry_skills ges WHERE > enfo_id = e.enfo_id) ) > ) > > 2005-05-01 13:31:17 CEST LOG: statement: set datestyle to 'ISO'; select > version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else > getdatabaseencoding() end; > 2005-05-01 13:31:17 CEST LOG: duration: 2.466 ms > 2005-05-01 13:31:17 CEST LOG: statement: set client_encoding = 'UNICODE' > 2005-05-01 13:31:17 CEST LOG: duration: 1.400 ms > 2005-05-01 13:31:17 CEST LOG: statement: begin; > 2005-05-01 13:31:17 CEST LOG: duration: 0.220 ms > 2005-05-01 13:31:17 CEST LOG: statement: rollback; begin; > 2005-05-01 13:31:17 CEST LOG: duration: 0.196 ms > --------------------------- HERE ------------------------------- > 2005-05-01 13:31:17 CEST LOG: statement: INSERT INTO ADDRESSES ( > ADDR_ID ,STREET ,PLACENO ,FLATNO ,CITY ,ZIP > ,C_STREET ,C_PLACENO ,C_FLATNO ,C_CITY ,C_ZIP > ) VALUES( 0 ,'7' ,'7' ,'7' ,'7' > ,'86-300' ,'' ,'' ,'' ,'' ,'' ) > 2005-05-01 13:31:17 CEST ERROR: duplicate key violates unique constraint > "addr_pk" > ---------------------------------------------------------- > 2005-05-01 13:31:17 CEST LOG: statement: rollback; begin; > 2005-05-01 13:31:17 CEST LOG: duration: 0.351 ms > 2005-05-01 13:31:17 CEST LOG: statement: rollback; begin; > 2005-05-01 13:31:17 CEST LOG: duration: 0.225 ms > 2005-05-01 13:31:17 CEST LOG: statement: rollback; begin; > 2005-05-01 13:31:17 CEST LOG: duration: 0.431 ms > 2005-05-01 13:31:17 CEST LOG: statement: SELECT * FROM states > ORDER BY name ASC > 2005-05-01 13:31:17 CEST LOG: duration: 3.400 ms > 2005-05-01 13:31:17 CEST LOG: statement: rollback; begin; > 2005-05-01 13:31:17 CEST LOG: duration: 0.396 ms > 2005-05-01 13:31:17 CEST LOG: statement: rollback; begin; > 2005-05-01 13:31:17 CEST LOG: duration: 0.242 ms > 2005-05-01 13:31:17 CEST LOG: statement: SELECT * FROM COMPANIES > ORDER BY name ASC > > --------------------------- After removing hidden property addressId from > form, it isn't set to 0 ------------------ > tatement: rollback; begin; > 2005-05-01 13:52:24 CEST LOG: duration: 0.485 ms > 2005-05-01 13:52:24 CEST LOG: statement: INSERT INTO ADDRESSES ( > ADDR_ID ,STREET ,PLACENO ,FLATNO ,CITY ,ZIP > ,C_STREET ,C_PLACENO ,C_FLATNO ,C_CITY ,C_ZIP > ) VALUES ( null ,'89' ,'89' ,'898' ,'9' > ,'86-300' ,'' ,'' ,'' ,'' ,'' ) > 2005-05-01 13:52:24 CEST ERROR: null value in column "addr_id" violates > not-null constraint > > In my tomcat logs, I have: > -------------------------------- > > DEBUG (CustomerNewActionDAO.java:57) - > com.protex.persistence.actiondao.CustomerNewActionDAO:insertObject > getAddressId:null > ERROR (CustomerNewActionDAO.java:81) - > com.protex.persistence.actiondao.CustomerNewActionDAO.insertObject error > Failed to update - id [insertCustomerNew] - parameterObject [EMAIL PROTECTED] > Cause: com.ibatis.common.jdbc.exception.NestedSQLException: > --- The error occurred in com/protex/persistence/sqlmapdao/sql/Customer.xml. > --- The error occurred while applying a parameter map. > --- Check the insertCustomerNew-InlineParameterMap. > --- Check the statement (update failed). > --- Cause: org.postgresql.util.PSQLException: ERROR: null value in column > "addr_id" violates not-null constraint > > Caused by: org.postgresql.util.PSQLException: ERROR: null value in column > "addr_id" violates not-null constraint >