Hey Mark, Assuming that you have something like this:
Artist bean properties: - id - name - whatever else... ...and your Recording bean properties: - id - name - year - artist (bean) ...you should be able to use dot notation to refer to the artist id like this: <insert id="insertRecording" parameterClass="com.ociweb.music.Recording"> insert into recordings (name, year, artist_id) values (#name#, #year#, #artist.id#) <selectKey resultClass="int" keyProperty="id"> select last_insert_id() as id </selectKey> </insert> Now for an [OT] comment: Looking at this, you may be making the same mistake I did when I started using iBATIS, in that you are naming things like "insertRecording". It'll work, but if you do it a little differently, it's easier to manage. In your sqlmapconfig.xml, if you enable name spaces, you can give each sqlmap file a namespace, like "Recording", you can name the mapped statements with simpler names like just "insert". Then, when you call the mapped statement, you call "Recording.insert" instead. The trick here is to keep the naming consistent - Recording.xml has a "Recording" namespace, etc... Now, as your system gets bigger, if you are looking for a mapped statement, the name tells you exactly which file it is in. Larry On 1/30/07, Mark Volkmann <[EMAIL PROTECTED]> wrote:
Here's my situation. I have an artists table and a recordings table in a MySQL database. The artists table has the columns id and name. The recordings table has the columns id, name, year and artist_id (a foreign key to the artists table). I have Artist and Recording POJO classes. The Recording class has an Artist field to hold a reference to the Artist object to which the Recording object belongs. So now I want to insert a row in the recordings table for a Recording object. I do this in my Java code. sqlMap.insert("insertRecording", recording); The recording variable holds the Recording object which already has its Artist field set. Here's the insert element found in Recording.xml. <insert id="insertRecording" parameterClass="com.ociweb.music.Recording"> insert into recordings (name, year, artist_id) values (#name#, #year#, #artist#) <selectKey resultClass="int" keyProperty="id"> select last_insert_id() as id </selectKey> </insert> I get this error. [java] --- The error occurred in Recording.xml. [java] --- The error occurred while applying a parameter map. [java] --- Check the insertRecording-InlineParameterMap. [java] --- Check the parameter mapping for the 'artist' property. [java] --- Cause: java.lang.NullPointerException Is iBATIS supposed to be able to get the key value from the Artist object automatically? I'm guessing the problem is in the last entry in "values( ... )", but I don't know what to do differently. I already verified that the Artist field in the recording isn't null and the Artist object it points to does have an id attribute value.