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>

Reply via email to