You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by "Stephen Chell (DSL AK)" <St...@datacom.co.nz> on 2005/01/27 23:07:08 UTC
Mapping an Oracle CHAR(1) column to java char property
Hi,
I'm having trouble mapping an oracle CHAR(1) column to a javabeans
property that is of type "char". I'm using SQL Maps 2.0.9 with Spring
1.1.3.
Here is my resultMap (defined in the mapping file ChargeType.xml):
<resultMap id="result"
class="nz.ac.otago.its.chargeadmin.domain.ChargeType">
<result property="code" column="CHARGE_TYPE_CODE"
columnIndex="1"/>
<result property="narration" column="NARRATION"
columnIndex="2"/>
<result property="status" column="STATUS" columnIndex="3"/>
<result property="versionNo" column="VERSION_NO"
columnIndex="4"/>
<result property="versionDateTime" column="VERSION_DATE_TIME"
columnIndex="5"/>
<result property="versionUser" column="VERSION_USER"
columnIndex="6"/>
</resultMap>
The offending column is the status column, which is a CHAR(1) in Oracle
and a char property in the ChargeType class. When I try to execute a
query that uses this result map, the following exception occurs:
org.springframework.jdbc.UncategorizedSQLException: (SqlMapClient
operation): encountered SQLException [
--- The error occurred in
nz/ac/otago/its/chargeadmin/dao/ibatis/maps/ChargeType.xml.
--- The error occurred while applying a result map.
--- Check the ChargeType.result.
--- Check the result mapping for the 'status' property.
--- Cause: com.ibatis.sqlmap.client.SqlMapException: No type handler
could be found to map the property 'status' to the column 'STATUS'. One
or both of the types, or the combination of types is not supported.];
nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in
nz/ac/otago/its/chargeadmin/dao/ibatis/maps/ChargeType.xml.
--- The error occurred while applying a result map.
--- Check the ChargeType.result.
--- Check the result mapping for the 'status' property.
--- Cause: com.ibatis.sqlmap.client.SqlMapException: No type handler
could be found to map the property 'status' to the column 'STATUS'. One
or both of the types, or the combination of types is not supported.
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in
nz/ac/otago/its/chargeadmin/dao/ibatis/maps/ChargeType.xml.
--- The error occurred while applying a result map.
--- Check the ChargeType.result.
--- Check the result mapping for the 'status' property.
--- Cause: com.ibatis.sqlmap.client.SqlMapException: No type handler
could be found to map the property 'status' to the column 'STATUS'. 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 'status' to the column
'STATUS'. One or both of the types, or the combination of types is not
supported.
at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQuery
WithCallback(GeneralStatement.java:183)
at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQuery
ForList(GeneralStatement.java:118)
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMap
ExecutorDelegate.java:610)
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMap
ExecutorDelegate.java:584)
at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessi
onImpl.java:105)
at
org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(S
qlMapClientTemplate.java:202)
at
org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClient
Template.java:142)
at
org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResul
t(SqlMapClientTemplate.java:164)
at
org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapC
lientTemplate.java:200)
at
nz.ac.otago.its.chargeadmin.dao.ibatis.SqlMapChargeTypeDao.getChargeType
List(SqlMapChargeTypeDao.java:22)
[etc]
Explicity specifing the type of the status property in the <result>
element using the javaType and/or jdbcType attributes doesn't help. I
tried all of the following combinations:
<result property="status" column="STATUS" columnIndex="3"
javaType="char"/>
<result property="status" column="STATUS" columnIndex="3"
javaType="java.lang.Character"/>
<result property="status" column="STATUS" columnIndex="3"
jdbcType="CHAR"/>
<result property="status" column="STATUS" columnIndex="3"
javaType="char" jdbcType="CHAR"/>
<result property="status" column="STATUS" columnIndex="3"
javaType="java.lang.Character" jdbcType="CHAR"/>
None of these work, although the exception when specifying
javaType="char" is different, as shown below.
What am I doing wrong?
Thanks in advance
Steve
------------------------------------------------------------------------
----------------
Exception when specifying javaType="char":
org.springframework.beans.factory.BeanCreationException: Error creating
bean with name 'sqlMapClient' defined in ServletContext resource
[/WEB-INF/dataAccessContext-local.xml]: Initialization of bean failed;
nested exception is java.lang.RuntimeException: Error occurred.
Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
Cause: java.lang.RuntimeException: Error parsing XPath
'/sqlMapConfig/sqlMap'.
Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
Cause: java.lang.RuntimeException: Error parsing XPath
'/sqlMap/resultMap/result'.
Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
Cause: java.lang.ClassNotFoundException: char
Caused by: java.lang.RuntimeException: Error parsing XPath
'/sqlMap/resultMap/result'.
Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
Cause: java.lang.ClassNotFoundException: char
Caused by: java.lang.RuntimeException: Error parsing XPath
'/sqlMapConfig/sqlMap'.
Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
Cause: java.lang.RuntimeException: Error parsing XPath
'/sqlMap/resultMap/result'.
Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
Cause: java.lang.ClassNotFoundException: char
Caused by: java.lang.RuntimeException: Error parsing XPath
'/sqlMap/resultMap/result'.
Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
Cause: java.lang.ClassNotFoundException: char
java.lang.RuntimeException: Error occurred.
Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
Cause: java.lang.RuntimeException: Error parsing XPath
'/sqlMapConfig/sqlMap'.
Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
Cause: java.lang.RuntimeException: Error parsing XPath
'/sqlMap/resultMap/result'.
Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
Cause: java.lang.ClassNotFoundException: char
Caused by: java.lang.RuntimeException: Error parsing XPath
'/sqlMap/resultMap/result'.
Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
Cause: java.lang.ClassNotFoundException: char
Caused by: java.lang.RuntimeException: Error parsing XPath
'/sqlMapConfig/sqlMap'.
Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
Cause: java.lang.RuntimeException: Error parsing XPath
'/sqlMap/resultMap/result'.
Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
Cause: java.lang.ClassNotFoundException: char
Caused by: java.lang.RuntimeException: Error parsing XPath
'/sqlMap/resultMap/result'.
Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
Cause: java.lang.ClassNotFoundException: char
at
com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConf
igParser.java:80)
at
com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapCli
entBuilder.java:62)
at
org.springframework.orm.ibatis.SqlMapClientFactoryBean.afterPropertiesSe
t(SqlMapClientFactoryBean.java:210)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
tory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1037)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
tory.createBean(AbstractAutowireCapableBeanFactory.java:305)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
tory.createBean(AbstractAutowireCapableBeanFactory.java:223)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Ab
stractBeanFactory.java:236)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Ab
stractBeanFactory.java:159)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.pre
InstantiateSingletons(DefaultListableBeanFactory.java:255)
at
org.springframework.context.support.AbstractApplicationContext.refresh(A
bstractApplicationContext.java:317)
at
org.springframework.web.context.support.AbstractRefreshableWebApplicatio
nContext.refresh(AbstractRefreshableWebApplicationContext.java:131)
at
org.springframework.web.context.ContextLoader.createWebApplicationContex
t(ContextLoader.java:177)
at
org.springframework.web.context.ContextLoader.initWebApplicationContext(
ContextLoader.java:105)
at
org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderS
ervlet.java:81)
at javax.servlet.GenericServlet.init(GenericServlet.java:258)
[etc]
Re: Mapping an Oracle CHAR(1) column to java char property
Posted by Clinton Begin <cl...@gmail.com>.
Chars haven't been supported to date, because JDBC does not support
them. However, I suppose there's no reason why you couldn't build a
custom type handler for that....
Clinton
On Fri, 28 Jan 2005 11:07:08 +1300, Stephen Chell (DSL AK)
<St...@datacom.co.nz> wrote:
> Hi,
>
> I'm having trouble mapping an oracle CHAR(1) column to a javabeans
> property that is of type "char". I'm using SQL Maps 2.0.9 with Spring
> 1.1.3.
>
> Here is my resultMap (defined in the mapping file ChargeType.xml):
>
> <resultMap id="result"
> class="nz.ac.otago.its.chargeadmin.domain.ChargeType">
> <result property="code" column="CHARGE_TYPE_CODE"
> columnIndex="1"/>
> <result property="narration" column="NARRATION"
> columnIndex="2"/>
> <result property="status" column="STATUS" columnIndex="3"/>
> <result property="versionNo" column="VERSION_NO"
> columnIndex="4"/>
> <result property="versionDateTime" column="VERSION_DATE_TIME"
> columnIndex="5"/>
> <result property="versionUser" column="VERSION_USER"
> columnIndex="6"/>
> </resultMap>
>
> The offending column is the status column, which is a CHAR(1) in Oracle
> and a char property in the ChargeType class. When I try to execute a
> query that uses this result map, the following exception occurs:
>
> org.springframework.jdbc.UncategorizedSQLException: (SqlMapClient
> operation): encountered SQLException [
> --- The error occurred in
> nz/ac/otago/its/chargeadmin/dao/ibatis/maps/ChargeType.xml.
> --- The error occurred while applying a result map.
> --- Check the ChargeType.result.
> --- Check the result mapping for the 'status' property.
> --- Cause: com.ibatis.sqlmap.client.SqlMapException: No type handler
> could be found to map the property 'status' to the column 'STATUS'. One
> or both of the types, or the combination of types is not supported.];
> nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
>
> --- The error occurred in
> nz/ac/otago/its/chargeadmin/dao/ibatis/maps/ChargeType.xml.
> --- The error occurred while applying a result map.
> --- Check the ChargeType.result.
> --- Check the result mapping for the 'status' property.
> --- Cause: com.ibatis.sqlmap.client.SqlMapException: No type handler
> could be found to map the property 'status' to the column 'STATUS'. One
> or both of the types, or the combination of types is not supported.
> com.ibatis.common.jdbc.exception.NestedSQLException:
> --- The error occurred in
> nz/ac/otago/its/chargeadmin/dao/ibatis/maps/ChargeType.xml.
> --- The error occurred while applying a result map.
> --- Check the ChargeType.result.
> --- Check the result mapping for the 'status' property.
> --- Cause: com.ibatis.sqlmap.client.SqlMapException: No type handler
> could be found to map the property 'status' to the column 'STATUS'. 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 'status' to the column
> 'STATUS'. One or both of the types, or the combination of types is not
> supported.
> at
> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQuery
> WithCallback(GeneralStatement.java:183)
> at
> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQuery
> ForList(GeneralStatement.java:118)
> at
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMap
> ExecutorDelegate.java:610)
> at
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMap
> ExecutorDelegate.java:584)
> at
> com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessi
> onImpl.java:105)
> at
> org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(S
> qlMapClientTemplate.java:202)
> at
> org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClient
> Template.java:142)
> at
> org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResul
> t(SqlMapClientTemplate.java:164)
> at
> org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapC
> lientTemplate.java:200)
> at
> nz.ac.otago.its.chargeadmin.dao.ibatis.SqlMapChargeTypeDao.getChargeType
> List(SqlMapChargeTypeDao.java:22)
> [etc]
>
> Explicity specifing the type of the status property in the <result>
> element using the javaType and/or jdbcType attributes doesn't help. I
> tried all of the following combinations:
>
> <result property="status" column="STATUS" columnIndex="3"
> javaType="char"/>
> <result property="status" column="STATUS" columnIndex="3"
> javaType="java.lang.Character"/>
> <result property="status" column="STATUS" columnIndex="3"
> jdbcType="CHAR"/>
> <result property="status" column="STATUS" columnIndex="3"
> javaType="char" jdbcType="CHAR"/>
> <result property="status" column="STATUS" columnIndex="3"
> javaType="java.lang.Character" jdbcType="CHAR"/>
>
> None of these work, although the exception when specifying
> javaType="char" is different, as shown below.
>
> What am I doing wrong?
>
> Thanks in advance
>
> Steve
>
> ------------------------------------------------------------------------
> ----------------
> Exception when specifying javaType="char":
>
> org.springframework.beans.factory.BeanCreationException: Error creating
> bean with name 'sqlMapClient' defined in ServletContext resource
> [/WEB-INF/dataAccessContext-local.xml]: Initialization of bean failed;
> nested exception is java.lang.RuntimeException: Error occurred.
> Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
> Cause: java.lang.RuntimeException: Error parsing XPath
> '/sqlMapConfig/sqlMap'.
> Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
> Cause: java.lang.RuntimeException: Error parsing XPath
> '/sqlMap/resultMap/result'.
> Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
> Cause: java.lang.ClassNotFoundException: char
> Caused by: java.lang.RuntimeException: Error parsing XPath
> '/sqlMap/resultMap/result'.
> Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
> Cause: java.lang.ClassNotFoundException: char
> Caused by: java.lang.RuntimeException: Error parsing XPath
> '/sqlMapConfig/sqlMap'.
> Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
> Cause: java.lang.RuntimeException: Error parsing XPath
> '/sqlMap/resultMap/result'.
> Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
> Cause: java.lang.ClassNotFoundException: char
> Caused by: java.lang.RuntimeException: Error parsing XPath
> '/sqlMap/resultMap/result'.
> Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
> Cause: java.lang.ClassNotFoundException: char
> java.lang.RuntimeException: Error occurred.
> Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
> Cause: java.lang.RuntimeException: Error parsing XPath
> '/sqlMapConfig/sqlMap'.
> Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
> Cause: java.lang.RuntimeException: Error parsing XPath
> '/sqlMap/resultMap/result'.
> Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
> Cause: java.lang.ClassNotFoundException: char
> Caused by: java.lang.RuntimeException: Error parsing XPath
> '/sqlMap/resultMap/result'.
> Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
> Cause: java.lang.ClassNotFoundException: char
> Caused by: java.lang.RuntimeException: Error parsing XPath
> '/sqlMapConfig/sqlMap'.
> Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
> Cause: java.lang.RuntimeException: Error parsing XPath
> '/sqlMap/resultMap/result'.
> Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
> Cause: java.lang.ClassNotFoundException: char
> Caused by: java.lang.RuntimeException: Error parsing XPath
> '/sqlMap/resultMap/result'.
> Cause: java.lang.RuntimeException: Error. Could not set TypeHandler.
> Cause: java.lang.ClassNotFoundException: char
> at
> com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConf
> igParser.java:80)
> at
> com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapCli
> entBuilder.java:62)
> at
> org.springframework.orm.ibatis.SqlMapClientFactoryBean.afterPropertiesSe
> t(SqlMapClientFactoryBean.java:210)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1037)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.createBean(AbstractAutowireCapableBeanFactory.java:305)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.createBean(AbstractAutowireCapableBeanFactory.java:223)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Ab
> stractBeanFactory.java:236)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Ab
> stractBeanFactory.java:159)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.pre
> InstantiateSingletons(DefaultListableBeanFactory.java:255)
> at
> org.springframework.context.support.AbstractApplicationContext.refresh(A
> bstractApplicationContext.java:317)
> at
> org.springframework.web.context.support.AbstractRefreshableWebApplicatio
> nContext.refresh(AbstractRefreshableWebApplicationContext.java:131)
> at
> org.springframework.web.context.ContextLoader.createWebApplicationContex
> t(ContextLoader.java:177)
> at
> org.springframework.web.context.ContextLoader.initWebApplicationContext(
> ContextLoader.java:105)
> at
> org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderS
> ervlet.java:81)
> at javax.servlet.GenericServlet.init(GenericServlet.java:258)
> [etc]
>