ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ninck Blok, Jeroen" <jeroen.ninck.b...@logica.com>
Subject Circular Relationships Mapping
Date Thu, 15 May 2008 12:40:00 GMT
Hi All,


I am relative new to iBatis and want to use it to map a circular relationship. However I am
experiencing some problems doing this.

I have two entities in Java: Set and Scenario. A Set can have zero or more scenarios and a
set can have zero or more sets. I have created the following structure in the database: A
table sets (with primary key set_id), a table scenarios (with primary key scenario_id) and
a linking table scenario_sets (with a foreign key to scenario_id and twice to set_id: one
for the parent set and for the child set).


I use the following mapping structure:

      <resultMap id="set" class="Set">

            <result property="setId" column="set_id"/>

            <result property="name" column="name"/>

            <result property="scenarios" column="set_id" select="getChildScenariosForSet"/>

            <result property="sets" column="set_id" select="getChildSetsForSet"/>


      <resultMap id="scenario-simple" class="Scenario">

            <result property="scenarioId" column="scenario_id"/>

            <result property="name" column="name"/>

            <result property="count" column="count"/>

            <result property="displayId" column="display_id"/>

            <result property="description" column="description"/>



With the following select queries:

      <select id="getScenario" parameterClass="Scenario" resultMap="scenario">

            select *

            from scenarios

            where scenario_id = #scenarioId#


      <select id="getAllSets" resultMap="set">

            select s.*

            from sets s

            where not exists (

                  select 1

                  from scenario_sets ss

                  where ss.set_id = s.set_id



      <select id="getChildScenariosForSet" parameterClass="int" resultMap="scenario-simple">

            select s.*

            from scenarios s,

                   scenario_sets ss

            where ss.parent_set_id = #value#

            and s.scenario_id = ss.scenario_id


      <select id="getChildSetsForSet" parameterClass="int" resultMap="set">

            select s.*

            from sets s,

                   scenario_sets ss

            where ss.parent_set_id = #value#

            and s.set_id = ss.set_id



The Set class has got two lists. One for Set instances and one for Scenario instances.

When I fill the database like this:

-          Set 1

o   Set 2

§  Set 3

§  Set 4

o   Set 5

-          Set 6


Now when I call getAllSets it does not fully populate the child sets. Set 4 is not added to
the list of Set 2, though I would expect this to happen. On page 39 of the developer guide
I found a warning concerning circular relationships, however I did not find a (fitting) solution
for more problem, since the number of child sets (and the level of child sets) is unlimited.

Is it possible to do the above with iBatis and I am doing it correctly?




Jeroen Ninck Blok

This e-mail and any attachment is for authorised use by the intended recipient(s) only. It
may contain proprietary material, confidential information and/or be subject to legal privilege.
It should not be copied, disclosed to, retained or used by, any other party. If you are not
an intended recipient then please promptly delete this e-mail and any attachment and all copies
and inform the sender. Thank you.

View raw message