[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-4965) Bug in org.hibernate.ejb.QueryImpl
Emmanuel Bernard (JIRA)
noreply at atlassian.com
Fri Apr 9 17:38:58 EDT 2010
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4965?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Emmanuel Bernard updated HHH-4965:
----------------------------------
Assignee: Emmanuel Bernard
Fix Version/s: 3.5.x
> Bug in org.hibernate.ejb.QueryImpl
> ----------------------------------
>
> Key: HHH-4965
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4965
> Project: Hibernate Core
> Issue Type: Bug
> Components: entity-manager
> Affects Versions: 3.5.0-CR-1
> Reporter: jean-claude cote
> Assignee: Emmanuel Bernard
> Priority: Minor
> Fix For: 3.5.x
>
> Attachments: HHH-4965-unit-test.diff
>
>
> Emmanuel
> There seems to be a bug in the QueryImpl class in the method
> extractParameterInfo()
> Here's what I've done:
> I create an equal predicate using a Path to House.address and a Address value.
> @Entity
> class House
> {
> @Type(type="jc.AddressUserType")
> @Columns(columns={@Column(name="address")})
> Address address;
> In the extractParameterInfo() method there is a loop that gets the
> javaType from a namedParameterTypeRedefinition.
> It gets the javaType (Address.class) then since it is not null tries
> to find the hibernate Type using the TypeFactory.heuristicType()
> method. But given a javaType this will only work for strings, int,
> double etc. What is passed in is an Address not an AddressUserType.
> The huristicType actually returns an hibernate SerializableType and
> resets the descriptor which was correct in the first place.
> I've fix this for myself my just commenting out the call to
> resetExpectedType but there must be a good reason why this call is
> made there correct?
> Thanks
> Jean-Claude
> @SuppressWarnings({ "unchecked", "RedundantCast" })
> private void extractParameterInfo(Map<String,Class>
> namedParameterTypeRedefinition) {
> if ( ! AbstractQueryImpl.class.isInstance( query ) ) {
> throw new IllegalStateException( "Unknown query type for parameter
> extraction" );
> }
> HashSet<Parameter<?>> parameters = new HashSet<Parameter<?>>();
> AbstractQueryImpl queryImpl = AbstractQueryImpl.class.cast( query );
> // extract named params
> for ( String name : (Set<String>)
> queryImpl.getParameterMetadata().getNamedParameterNames() ) {
> final NamedParameterDescriptor descriptor =
> queryImpl.getParameterMetadata().getNamedParameterDescriptor( name );
> Class javaType = namedParameterTypeRedefinition.get( name );
> if ( javaType != null ) {
> descriptor.resetExpectedType(
> TypeFactory.heuristicType( javaType.getName() )
> );
> }
> else if ( descriptor.getExpectedType() != null ) {
> javaType = descriptor.getExpectedType().getReturnedClass();
> }
> final ParameterImpl parameter = new ParameterImpl( name, javaType );
> parameters.add( parameter );
> if ( descriptor.isJpaStyle() ) {
> if ( jpaPositionalIndices == null ) {
> jpaPositionalIndices = new HashSet<Integer>();
> }
> jpaPositionalIndices.add( Integer.valueOf( name ) );
> }
> }
--
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
More information about the hibernate-issues
mailing list