For maximum portability CayenneModeler uses JDBC standard types for
mapping, being ignorant of vendor extentions. But OracleAdapter actually
attempts to use OracleTypes.CURSOR when it recognizes it... I guess in
this case it doesn't.
Suggested workaround:
// somewhere on app startup manually update the mapping...
EntityResolver resolver =
   Configuration.getSharedConfiguration()
     .getDomain()
     .getEntityResolver();
Procedure proc = resolver.lookupProcedure(procedureName);
Iterator it = proc.getCallOutParameters().iterator();
while(it.hasNext()) {
  ProcedureParameter param = (ProcedureParameter) it.next();
  if(param.getType() == Types.OTHER) {
     param.setType(OracleAdapter.getOracleCursorType());
  }
}
Please post a note how this worked... We may need to add a new feature to
the Modeler to support vendor extentions (we have attribute prototypes
feature request in JIRA, I guess this might go in there).
Andrus
OracleAdapter.getOracleCursorType()
Andrus
>  Hi,
>  i'm a new Cayenne's user.
>  I have a Oracle stored procedure that return a CURSOR by OUT parmeter.
> With Cayenne Modeler i have generated a datamap xml file:
>
>       <procedure name="USERLOGIN" schema="xxxx" catalog="xxxx"
> returningValue="true">
>  		<procedure-parameter name="I_S_USER_ALIAS" type="VARCHAR"
> direction="in"/>
> 		<procedure-parameter name="O_RC_USERINFO" type="OTHER"
> direction="out"/> <procedure-parameter name="O_N_EXITFLAG"
> type="DECIMAL" length="22" direction="out"/>
>  		<procedure-parameter name="O_S_EXITMSG" type="VARCHAR"
> direction="out"/>
>  	</procedure>
>
>  O_RC_USERINFO is a REF CURSOR that i want to map to my java Object.
>
>  I try to access to stored procedure in that way:
>
>
>       	  DataContext ctxt = DataContext.createDataContext();>
>         ProcedureQuery query = new ProcedureQuery("USERLOGIN");
> query.addParameter("I_S_USER_ALIAS", "smith");
>         List outList = ctxt.performQuery(query);
>
>
>  when i execute the last line (List outList = ctxt.performQuery(query);)
> i found that error:
>
>  INFO  QueryLogger: *** error.
>  java.sql.SQLException: Invalid column type
>
>  the problem is referred to the "OTHER" type that is associated to my
> REF CURSOR.
>
>  Anyone can help me?
>
>  Usually, with JDBC, i use  OracleTypes.CURSOR  to retrive data from
> this REF CURSOR.  Why Cayenne Modeler use "OTHER" type instead?
>
>
>  Thank's.
>
>  D.
This archive was generated by hypermail 2.0.0 : Fri Jan 14 2005 - 13:59:05 EST