I am working through a simple example where I have a table called "titles" that contains attributes about books. A title will have 1..* authors and a title will also have 1..* editors. Joining the titles and authors was simple enough. However, when I pull in the editors (using a join table) I found that I need to make adjustments. The "adjustment" I used was to make the Editor class comparable, make the Title class contain Set<Editor> editors and tell ibatis that the java type is "java.util.TreeSet".
I don't see any obvious waste of resources since the result set itself has to return the different combinations of authors and editors (ie 2 authors and 3 editors equals 6 rows in the result set) and a RowHandler would have to deal with each row anyway. Am I missing something? public class Title Set<Editor> editors; . . . Using the TreeSet in the sql map prevents duplication. <resultMap groupBy="id" id="titleDetails" extends="abatorgenerated_TitleResult" class="net.bookstore.persist.vo.Title" > <result column="pub_id" property="publisher.id" jdbcType="CHAR" /> <result column="pub_name" property="publisher.pubName" jdbcType="CHAR" /> <result column="address" property="publisher.address" jdbcType="CHAR" /> <result column="city" property="publisher.city" jdbcType="CHAR" /> <result column="state" property="publisher.state" jdbcType="CHAR" /> <result property="authors" resultMap="authors.abatorgenerated_AuthorResult" column="au_id" javaType="java.util.TreeSet"/> <result property="editors" resultMap="editors.abatorgenerated_EditorResult" column="ed_id" javaType="java.util.TreeSet"/> </resultMap> -- dlm