person_id column is not referenced is not in the resultMap, if you add
that, it should work....
<resultMap id="resulMap-person" class="Person" groupBy="person_id">
<result property="personId" column="person_id"/>
<result property="firstName" column="first_name"/>
<result property="lasttName" column="last_name"/>
<result property="addresses" resultMap="resultMap-adress"/>
</resultMap>
Fábio Pisaruk wrote:
Hi,
Is there a way to use groupBy with a column name?
I need to do so 'cause there is no property that uniquely identify the
bean
and i am not able to change it do add one.
For example:
Suppose i´ve got two tables: Person and Address.
Person:
person_id
first_name
last_name
Address:
person_id
address_id
address
country
city
And two beans:
Person
firstName
lastName
addresses(Address[])
Address
address
country
city
My maps:
<resultMap id="resulMap-person" class="Person" groupBy="person_id">
<result property="firstName" column="first_name"/>
<result property="lasttName" column="last_name"/>
<result property="addresses" resultMap="resultMap-adress"/>
</resultMap>
<resultMap id="resulMap-address" class="Address">
<result property="address" column="address"/>
<result property="country" column="country"/>
<result property="city" column="city"/>
</resultMap>
My sql:
<select id="get-person-by-id" parameterClass="int"
resultMap="resulMap-person">
select p.person_id,p.first_name,p.last_name,a.address,a.city,a.country
from Person p ,Address a
where p.person_id=#value# and p.person_id=a.person_id
</select>
In doing so i am not getting the desired result.
Person information are replicated for each address it contains.
PS: I know two workarounds that i don´t consider good solutions:
1-) Creating a wrapperPerson with a person_id attribute and having
Ibatis grouping result on it or
2-) using a nested select to get address for each person:
<result property="addresses" select="get-addresses-by-person_id"
column="person_id"/>
<select id="get-addresses-by-person_id" parameterClass="int"
resultMap="resultMap-adress">
select * from Address where person_id=#value#
</select>
Thanks in advance
--
Visto como se não executa logo a sentença sobre a má obra, o coração
dos filhos dos homens está inteiramente disposto a praticar o mal.
--Nerd´s sign
If you have four classes, Everybody, Somebody, Anybody, and Nobody, if
Somebody has a bug, it could be Anybody 's fault but Nobody really
knows, while Everybody shares responsibility.
"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the universe trying
to build bigger and better idiots. So far, the universe is winning." -
Rick Cook