Hi Mikael, could you try to map creditEvents to a Set of Strings instead and see if this works?
Regards Ka --- Original Nachricht --- Absender: Mikael Andersson Datum: 18.05.2009 23:52 > Hi > > I have a typehandler for the enum in the second result map which is > referenced from the CounterpartyHedgeVOResult result map. > > Do you mean that I should try having the second result map just return > strings, and change the line in the first result map to this? : > > <result resultMap="CDS_HEDGE.CreditEventEnumResult" property="creditEvents" > typeHandler="hedge.dao.CreditEventEnumReadOnlyTypeHandler"/> > > I'll give it a go tomorrow when I'm at work. > > Thanks, > micke > > 2009/5/18 DelGurth <delgu...@gmail.com> > >> On Mon, May 18, 2009 at 7:40 PM, Mikael Andersson <mail.mi...@gmail.com> >> wrote: >> > Hi >> > >> > I'm having problems mapping to a property which is a Set of java5 enums. >> > >> > I have a class CounterpartyHedgeVO which has the property creditEvents >> which >> > is a Set<CreditEventEnum>. >> > >> > Not sure what the problem is but I'm guessing that iBATIS tries to treat >> the >> > Enum like a POJO and fails to create it since there isn't a public >> > constructor. Or? >> > >> > Any help would be really appreciated. >> > >> > My current sqlmap (omitted the typeAlias definitions): >> > >> > <resultMap class="CounterpartyHedgeVO" id="CounterpartyHedgeVOResult" >> > groupBy="refNo"> >> > <result column="POS_RefNoADB" jdbcType="VARCHAR" property="refNo"/> >> > <result column="PRT_Code" jdbcType="VARCHAR" property="prtCode"/> >> > <result column="RBE_CodeCpty" jdbcType="VARCHAR" >> > property="counterpartyCode"/> >> > <result column="POS_Tradebook" jdbcType="VARCHAR" >> > property="tradeBook"/> >> > >> > <result resultMap="CDS_HEDGE.CreditEventEnumResult" >> > property="creditEvents"/> >> > </resultMap> >> > >> > <resultMap class="CreditEventEnum" id="CreditEventEnumResult"> >> > <result column="CRE_EventType" property="value" jdbcType="VARCHAR" >> > typeHandler="hedge.dao.CreditEventEnumReadOnlyTypeHandler"/> >> > </resultMap> >> > >> > Stack trace: >> > --- The error occurred in ibatis/sqlmap-map-cds-hedge.xml. >> > --- The error occurred while applying a result map. >> > --- Check the CDS_HEDGE.CreditEventEnumResult. >> > --- The error occured while instantiating the result object >> > --- Cause: java.lang.RuntimeException: JavaBeansDataExchange could not >> > instantiate result class. Cause: java.lang.InstantiationException: >> > hedge.interfaces.CreditEventEnum >> > at >> > >> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:188) >> > at >> > >> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123) >> > at >> > >> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:615) >> > at >> > >> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589) >> > at >> > >> com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118) >> > at >> > >> org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:298) >> > at >> > >> org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:209) >> > ... 40 more >> > Caused by: java.lang.RuntimeException: JavaBeansDataExchange could not >> > instantiate result class. Cause: java.lang.InstantiationException: >> > hedge.interfaces.CreditEventEnum >> > at >> > >> com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange.setData(JavaBeanDataExchange.java:108) >> > at >> > >> com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setResultObjectValues(BasicResultMap.java:373) >> > at >> > >> com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setNestedResultMappingValue(BasicResultMap.java:449) >> > at >> > >> com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.applyNestedResultMap(BasicResultMap.java:396) >> > at >> > >> com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setResultObjectValues(BasicResultMap.java:382) >> > at >> > >> com.ibatis.sqlmap.engine.mapping.statement.RowHandlerCallback.handleResultObject(RowHandlerCallback.java:64) >> > at >> > >> com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:382) >> > at >> > >> com.ibatis.sqlmap.engine.execution.SqlExecutor.handleMultipleResults(SqlExecutor.java:301) >> > at >> > >> com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQueryProcedure(SqlExecutor.java:283) >> > at >> > >> com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.sqlExecuteQuery(ProcedureStatement.java:34) >> > at >> > >> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173) >> > ... 46 more >> > Caused by: java.lang.InstantiationException: >> > hedge.interfaces.CreditEventEnum >> > at java.lang.Class.newInstance0(Class.java:340) >> > at java.lang.Class.newInstance(Class.java:308) >> > at com.ibatis.common.resources.Resources.instantiate(Resources.java:294) >> > at >> > >> com.ibatis.sqlmap.engine.mapping.result.ResultObjectFactoryUtil.createObjectInternally(ResultObjectFactoryUtil.java:127) >> > at >> > >> com.ibatis.sqlmap.engine.mapping.result.ResultObjectFactoryUtil.createObjectThroughFactory(ResultObjectFactoryUtil.java:95) >> > at >> > >> com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange.setData(JavaBeanDataExchange.java:106) >> > ... 56 more >> > >> > Cheers, >> > Micke >> >> I think you will need to create a typehandler so iBATIS can work with your >> Enum. >> >> See: >> http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+use+a+Custom+Type+Handler+with+complex+property+or+Type+Safe+Enumeration >> >> Regards, >> Wessel >> >