From: James S. (JIRA) <no...@at...> - 2005-11-07 18:53:13
|
Named Query DAO methods with Primitive types fail to compile ------------------------------------------------------------ Key: HBX-469 URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-469 Project: Hibernate Tools Type: Bug Components: hbm2java Versions: 3.1beta1 Reporter: James Schopp if you define a name query that receives a primitive or wrapper parameter, then the DAO method for the name query will always be generated with "primitive" type. This failsto compile, since the call to query.setParameter("paramName", value); takes an object, not a primitive. For example: <query name="com.mycom.persistence.Account.findCommercialAccountById"> from Account where accountTypeClass='C' and accountNumber=:accountNumber <query-param name="accountNumber" type="java.lang.Long" /> </query> This generates the code public List findCommercialAccountById(long accountNumber) { Query query = getSession(false) .getNamedQuery("com.alldata.ecis.persistence.Account.findCommercialAccountById"); query.setParameter("accountNumber", accountNumber); return query.list(); } This code does not compile. I beleive the fix might be as simple as modifying Cfg2JavaTool.asFinderArgumentList(): if ( type instanceof PrimitiveType ) { typeClass = ( (PrimitiveType) type ).getPrimitiveClass(); } else { typeClass = type.getReturnedClass(); } I think this should always return the type.getReturnedClass(), and never the primitive... ALSO: it would ne nice to have another Cfg2JavaTool function like asFinderArgumentList but that generates the list as parameters to the call, not the function definition. For example, if a named query takes params: Long accountNumer, String accountName then, maybe have function called asFinderCallerArgumentList() which would return accountNumer, accountName -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Max R. A. (JIRA) <no...@at...> - 2005-11-10 12:29:44
|
[ http://opensource.atlassian.com/projects/hibernate/browse/HBX-469?page=comments#action_20668 ] Max Rydahl Andersen commented on HBX-469: ----------------------------------------- hmm - it will work on jdk 1.5 ;) but i see your point and feel free to provide a patch for it. > Named Query DAO methods with Primitive types fail to compile > ------------------------------------------------------------ > > Key: HBX-469 > URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-469 > Project: Hibernate Tools > Type: Bug > Components: hbm2java > Versions: 3.1beta1 > Reporter: James Schopp > > > if you define a name query that receives a primitive or wrapper parameter, then the DAO method for the name query will always be generated with "primitive" type. This failsto compile, since the call to query.setParameter("paramName", value); takes an object, not a primitive. For example: > <query name="com.mycom.persistence.Account.findCommercialAccountById"> > from Account where accountTypeClass='C' and accountNumber=:accountNumber > <query-param name="accountNumber" type="java.lang.Long" /> > </query> > This generates the code > public List findCommercialAccountById(long accountNumber) { > Query query = getSession(false) > .getNamedQuery("com.alldata.ecis.persistence.Account.findCommercialAccountById"); > query.setParameter("accountNumber", accountNumber); > return query.list(); > } > This code does not compile. > I beleive the fix might be as simple as modifying Cfg2JavaTool.asFinderArgumentList(): > if ( type instanceof PrimitiveType ) { > typeClass = ( (PrimitiveType) type ).getPrimitiveClass(); > } > else { > typeClass = type.getReturnedClass(); > } > I think this should always return the type.getReturnedClass(), and never the primitive... > ALSO: it would ne nice to have another Cfg2JavaTool function like > asFinderArgumentList > but that generates the list as parameters to the call, not the function definition. > For example, if a named query takes params: > Long accountNumer, String accountName > then, maybe have function called > asFinderCallerArgumentList() > which would return > accountNumer, accountName -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Max R. A. (JIRA) <no...@at...> - 2006-07-07 11:20:56
|
[ http://opensource.atlassian.com/projects/hibernate/browse/HBX-469?page=all ] Max Rydahl Andersen closed HBX-469: ----------------------------------- Fix Version: 3.2beta6 Resolution: Fixed should be fixed now. > Named Query DAO methods with Primitive types fail to compile > ------------------------------------------------------------ > > Key: HBX-469 > URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-469 > Project: Hibernate Tools > Type: Bug > Components: hbm2java > Versions: 3.1beta1 > Reporter: James Schopp > Fix For: 3.2beta6 > > > if you define a name query that receives a primitive or wrapper parameter, then the DAO method for the name query will always be generated with "primitive" type. This failsto compile, since the call to query.setParameter("paramName", value); takes an object, not a primitive. For example: > <query name="com.mycom.persistence.Account.findCommercialAccountById"> > from Account where accountTypeClass='C' and accountNumber=:accountNumber > <query-param name="accountNumber" type="java.lang.Long" /> > </query> > This generates the code > public List findCommercialAccountById(long accountNumber) { > Query query = getSession(false) > .getNamedQuery("com.alldata.ecis.persistence.Account.findCommercialAccountById"); > query.setParameter("accountNumber", accountNumber); > return query.list(); > } > This code does not compile. > I beleive the fix might be as simple as modifying Cfg2JavaTool.asFinderArgumentList(): > if ( type instanceof PrimitiveType ) { > typeClass = ( (PrimitiveType) type ).getPrimitiveClass(); > } > else { > typeClass = type.getReturnedClass(); > } > I think this should always return the type.getReturnedClass(), and never the primitive... > ALSO: it would ne nice to have another Cfg2JavaTool function like > asFinderArgumentList > but that generates the list as parameters to the call, not the function definition. > For example, if a named query takes params: > Long accountNumer, String accountName > then, maybe have function called > asFinderCallerArgumentList() > which would return > accountNumer, accountName -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |