I'm having a hard time with groupBy and hashmaps. I'm getting an
exception:
"Error instantiating collection property for mapping 'blog'. Cause:
java.lang.ClassCastException: java.lang.Object"
I call queryForMap("getBlogAndCategoriesForContent", parameters, "blog",
"category");
When my query completes, I'm expecting a Map<Blog, List<Category>> to be
returned.
Am I asking too much from Ibatis?
I have the following result maps/queries.
<!-- stuff cut -->
<resultMap id="metadataNoContentId"
class="cnwk.blogs.beans.Metadata">
<!-- stuff cut -->
<result property="typeId" column="typeId"/>
</resultMap>
<resultMap id="categoryDetails" class="cnwk.blogs.beans.Category"
extends="metadataNoContentId">
<result property="contentId" column="category.contentId"/>
<result property="name" column="category.name"/>
</resultMap>
<resultMap id="blogAndCategoryMapping" class="java.util.HashMap"
groupBy="blog.contentId">
<result property="blog" resultMap="Content.blogDetails"/>
<result property="category"
resultMap="Content.categoryDetails"/>
</resultMap>
<!-- sql select fragments -->
<sql id="selectBlogAndCategoryMap">
SELECT * FROM $databaseName$.blogAndCategoryMap JOIN
$databaseName$.metadata ON metadata.contentId =
blogAndCategoryMap.categoryContentId JOIN
$databaseName$.category ON metadata.contentId =
category.contentId JOIN
$databaseName$.metadata AS blogMetadata ON
blogAndCategoryMap.blogContentId = blogMetadata.contentId JOIN
$databaseName$.blog ON blogMetadata.contentId = blog.contentId
</sql>
<sql id="blogAndCategoriesForOne">
WHERE blogAndCategoryMap.contentId = #contentId#
</sql>
<!-- single mapping queries -->
<select id="getBlogAndCategoriesForContent" parameterClass="map"
resultMap="blogAndCategoryMapping">
<include refid="selectBlogAndCategoryMap"/>
<include refid="blogAndCategoriesForOne"/>
</select>