Hi
I am currently playing around with ibatis and stuck with bidirectional
associations/circular dependencies - after googling a little bit around my
understanding is, that it should work, when caching/lazy loading is
enabled.
So, consider the following java classes for small example:
class Campaign {
Integer id;
String name;
List<Target> targets;
}
class Target {
Integer id;
String name;
String email;
Campaign campaign;
}
This is basically the bidirectional association. Spoken from the
application point of view something like
user.getCampaign().getUsers().get(0).getCampaign()
should work.
>From the ibatis point of view I seem not to have understand yet correctly
how to handle that.
Here are my resultMaps
<resultMap id="campaignTargetMap" type="Target">
<id property="id" column="target_id" />
<result property="name" column="target_name" />
<result property="email" column="target_email" />
<association property="campaign" resultMap="campaignResultMap" />
</resultMap>
<resultMap id="campaignResultMap" type="Campaign">
<id property="id" column="campaign_id" />
<result property="name" column="campaign_name" />
<collection property="targets" ofType="Target"
resultMap="campaignTargetMap" />
</resultMap>
However I keep getting a stackoverflow error, indicating that it does not
work, when I call something like the java code above.
Here goes the exception:
java.lang.StackOverflowError
at
com.mysql.jdbc.ConnectionImpl.getCharsetConverter(ConnectionImpl.java:2904)
at com.mysql.jdbc.ResultSetRow.getString(ResultSetRow.java:793)
at com.mysql.jdbc.ByteArrayRow.getString(ByteArrayRow.java:72)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5700)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5577)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5617)
at
org.apache.ibatis.type.StringTypeHandler.getNullableResult(StringTypeHandler.java:17)
at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:24)
at
org.apache.ibatis.executor.resultset.FastResultSetHandler.getPropertyMappingValue(FastResultSetHandler.java:225)
at
org.apache.ibatis.executor.resultset.FastResultSetHandler.applyPropertyMappings(FastResultSetHandler.java:208)
at
org.apache.ibatis.executor.resultset.NestedResultSetHandler.getRowValue(NestedResultSetHandler.java:106)
at
org.apache.ibatis.executor.resultset.NestedResultSetHandler.applyNestedResultMappings(NestedResultSetHandler.java:136)
at
org.apache.ibatis.executor.resultset.NestedResultSetHandler.getRowValue(NestedResultSetHandler.java:107)
at
org.apache.ibatis.executor.resultset.NestedResultSetHandler.applyNestedResultMappings(NestedResultSetHandler.java:136)
at
org.apache.ibatis.executor.resultset.NestedResultSetHandler.getRowValue(NestedResultSetHandler.java:107)
[from here the last two lines keep alternating]
I put a quick look at ibatis jira issues 760[1] and 427[2], but that
didn't help me so far.
Regards and many thanks for any insightful pointers,
Alexander
[1] https://issues.apache.org/jira/browse/IBATIS-760
[2] https://issues.apache.org/jira/browse/IBATIS-427
--
http://www.emplify.de
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]