Did you upgrade the version of iBATIS that comes with JPetStore?

FYI for all:  I'm in the process of heavily refactoring JPetStore, as it's in great need of some TLC.

Cheers,
Clinton


On 11/23/05, Daniel Wintschel <[EMAIL PROTECTED]> wrote:
Hi all,

I've been fiddling around with JPetStore, trying to add an example that performs a groupBy - in order to demonstrate the 'solution' to the N+1 problem. I have this working in a completely different application that I wrote, but for some reason, this is giving me grief. I've been at it for about 5 hours now, and I'm probably blind and stupid... So here goes:

I've gone in and added a property to the com.ibatis.jpetstore.domain.Category class. The property is a java.util.List called "products" with the appropriate getProducts() and setProducts(List) methods.

I added two new ResultMap's into the Category.xml in order for me to query for a Category that is populated with all Product's that are in a given category. Here is the relevant portion of my new Category.xml file:

  <!-- Added a type alias for product class here - don't know whether that's good practice or not, but it's what I did -->
  <typeAlias alias="categoryProduct" type="com.ibatis.jpetstore.domain.Product "/>

  <resultMap id="categoryWithProducts" class="category" groupBy="categoryId">
    <result property="categoryId" column="CATEGORY_ID"/>
    <result property="name" column="CATEGORY_NAME"/>
    <result property="description" column="CATEGORY_DESCN"/>
    <result property="products" resultMap=" Category.productsInCategory"/>
  </resultMap>

  <resultMap id="productsInCategory" class="categoryProduct">
    <result property="productId" column="PRODUCT_ID"/>
    <result property="categoryId" column="CATEGORY_ID"/>
    <result property="name" column="PRODUCT_NAME"/>
    <result property="description" column="PRODUCT_DESCN"/>
  </resultMap>


  <select id="getCategoryWithProducts" resultMap="categoryWithProducts" parameterClass="string">
    select
        CATEGORY.CATID as CATEGORY_ID,
        CATEGORY.NAME as CATEGORY_NAME,
        CATEGORY.DESCN as CATEGORY_DESCN,
        PRODUCT.PRODUCTID as PRODUCT_ID,
        PRODUCT.NAME as PRODUCT_NAME,
        PRODUCT.DESCN as PRODUCT_DESCN
      from CATEGORY, PRODUCT
    where PRODUCT.CATEGORY = CATEGORY.CATID and CATEGORY.CATID = #value#
  </select>

Now, I've also added an appropriate method to the CategoryService, CategoryDao etc. so I could execute the "getCategoryWithProducts" mapped statement.

When I execute the mapped statement, it craps out every time, and I get the following exception:
(sorry for the big trace, I've tried to snip it)

DEBUG [main] - Created connection 13926634.
DEBUG [main] - {conn-100000} Connection
DEBUG [main] - {pstm-100001} PreparedStatement:      select         CATEGORY.CATID as CATEGORY_ID,         CATEGORY.NAME as CATEGORY_NAME,         CATEGORY.DESCN as CATEGORY_DESCN,         PRODUCT.PRODUCTID as PRODUCT_ID,         PRODUCT.NAME as PRODUCT_NAME,         PRODUCT.DESCN as PRODUCT_DESCN       from CATEGORY, PRODUCT     where PRODUCT.CATEGORY = CATEGORY.CATID and CATEGORY.CATID = ?
DEBUG [main] - {pstm-100001} Parameters: [DOGS]
DEBUG [main] - {pstm-100001} Types: [java.lang.String]
DEBUG [main] - {rset-100002} ResultSet
DEBUG [main] - Returned connection 13926634 to pool.
com.ibatis.dao.client.DaoException: Failed to execute queryForObject - id [getCategoryWithProducts], parameterObject [DOGS].  Cause: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in com/ibatis/jpetstore/persistence/sqlmapdao/sql/Category.xml.
--- The error occurred while applying a result map.
--- Check the Category.categoryWithProducts.
--- Check the result mapping for the 'products' property.
--- Cause: com.ibatis.sqlmap.client.SqlMapException: No type handler could be found to map the property 'products' to the column 'null'.  One or both of the types, or the combination of types is not supported.
Caused by: com.ibatis.sqlmap.client.SqlMapException: No type handler could be found to map the property 'products' to the column 'null'.  One or both of the types, or the combination of types is not supported.
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in com/ibatis/jpetstore/persistence/sqlmapdao/sql/Category.xml.
--- The error occurred while applying a result map.
--- Check the Category.categoryWithProducts.
--- Check the result mapping for the 'products' property.
--- Cause: com.ibatis.sqlmap.client.SqlMapException: No type handler could be found to map the property 'products' to the column 'null'.  One or both of the types, or the combination of types is not supported.
Caused by: com.ibatis.sqlmap.client.SqlMapException: No type handler could be found to map the property 'products' to the column 'null'.  One or both of the types, or the combination of types is not supported.
    at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:180)

Now, I've tried EVERYTHING I could possibly think of... nine hundred times... I have this exact same thing working (conceptually, but with totally different object types) on another project... I have absolutely no idea what I've messed up... Can anyone offer any clues?

Thanks!

Reply via email to