The problem was an oversight on my behalf. The problem was in the one-to-one declaration in the Artist map (parent) to ArtistImages map (child). Instead of declaring the name as name="ArtistImages" I declared it as name="artistimages". Also, the addition of cascade="delete" helped as well! DUH!! The maps now read as :
Artist Map:Parent
<hibernate-mapping package="test">
<class name="Artist" table="artisttbl">
<id name="ID" column="artist_id">
<generator class="sequence">
<param name="sequence">artist_seq_id</param>
</generator>
</id>
..........
<one-to-one name="ArtistImages" class="ArtistImages" cascade="delete"/>
</class>
</hibernate-mapping>
ArtistImages Map:Child
<hibernate-mapping package="test">
<class name="ArtistImages" table="artistimagestbl">
<id name="ID" column="artist_id">
<generator class="foreign">
<param name="property">Artist</param>
</generator>
</id>
..........
<one-to-one name="Artist" class="Artist" constrained="true" cascade="delete"/>
</class>
</hibernate-mapping>
So to delete an associated record in both Artist and ArtistImages tables I do:
artist.deleteArtist(artist_id) or
artistimages.deleteArtistImages(artist_id)
Question? how do I define the Artist (parent) map as being lazy, in this instance, so that when i load an artist it does not load the child record until I physically request it? I have a static method, getArtist(), which I call in my code as:
Artist artist = Artist.getArtist(artist_id);
Peter
|