|
23 | 23 | */
|
24 | 24 | package org.hibernate.ejb;
|
25 | 25 |
|
| 26 | +import static javax.persistence.TemporalType.DATE; |
| 27 | +import static javax.persistence.TemporalType.TIME; |
| 28 | +import static javax.persistence.TemporalType.TIMESTAMP; |
| 29 | + |
26 | 30 | import java.util.Calendar;
|
27 | 31 | import java.util.Collection;
|
28 | 32 | import java.util.Collections;
|
|
31 | 35 | import java.util.List;
|
32 | 36 | import java.util.Map;
|
33 | 37 | import java.util.Set;
|
| 38 | + |
34 | 39 | import javax.persistence.NoResultException;
|
35 | 40 | import javax.persistence.NonUniqueResultException;
|
36 | 41 | import javax.persistence.Parameter;
|
|
40 | 45 | import javax.persistence.TransactionRequiredException;
|
41 | 46 | import javax.persistence.TypedQuery;
|
42 | 47 |
|
43 |
| -import org.jboss.logging.Logger; |
44 |
| - |
45 | 48 | import org.hibernate.CacheMode;
|
46 | 49 | import org.hibernate.FlushMode;
|
47 | 50 | import org.hibernate.HibernateException;
|
48 | 51 | import org.hibernate.LockMode;
|
49 | 52 | import org.hibernate.QueryParameterException;
|
50 |
| -import org.hibernate.SQLQuery; |
51 | 53 | import org.hibernate.TypeMismatchException;
|
52 | 54 | import org.hibernate.ejb.internal.EntityManagerMessageLogger;
|
53 | 55 | import org.hibernate.ejb.util.ConfigurationHelper;
|
|
56 | 58 | import org.hibernate.engine.query.spi.OrdinalParameterDescriptor;
|
57 | 59 | import org.hibernate.engine.spi.SessionFactoryImplementor;
|
58 | 60 | import org.hibernate.hql.internal.QueryExecutionRequestException;
|
59 |
| -import org.hibernate.internal.SQLQueryImpl; |
60 | 61 | import org.hibernate.internal.AbstractQueryImpl;
|
| 62 | +import org.hibernate.internal.SQLQueryImpl; |
61 | 63 | import org.hibernate.type.CompositeCustomType;
|
62 |
| - |
63 |
| -import static javax.persistence.TemporalType.DATE; |
64 |
| -import static javax.persistence.TemporalType.TIME; |
65 |
| -import static javax.persistence.TemporalType.TIMESTAMP; |
| 64 | +import org.hibernate.type.Type; |
| 65 | +import org.jboss.logging.Logger; |
66 | 66 |
|
67 | 67 | /**
|
68 | 68 | * Hibernate implementation of both the {@link Query} and {@link TypedQuery} contracts.
|
@@ -111,7 +111,7 @@ private void extractParameterInfo(Map<String,Class> namedParameterTypeRedefiniti
|
111 | 111 | final NamedParameterDescriptor descriptor =
|
112 | 112 | queryImpl.getParameterMetadata().getNamedParameterDescriptor( name );
|
113 | 113 | Class javaType = namedParameterTypeRedefinition.get( name );
|
114 |
| - if ( javaType != null && mightNeedRedefinition( javaType, descriptor.getExpectedType().getClass() ) ) { |
| 114 | + if ( javaType != null && mightNeedRedefinition( javaType, descriptor.getExpectedType() ) ) { |
115 | 115 | descriptor.resetExpectedType(
|
116 | 116 | sfi().getTypeResolver().heuristicType( javaType.getName() )
|
117 | 117 | );
|
@@ -151,10 +151,12 @@ private SessionFactoryImplementor sfi() {
|
151 | 151 | return (SessionFactoryImplementor) getEntityManager().getFactory().getSessionFactory();
|
152 | 152 | }
|
153 | 153 |
|
154 |
| - private boolean mightNeedRedefinition(Class javaType, Class expectedType) { |
| 154 | + private boolean mightNeedRedefinition(Class javaType, Type expectedType) { |
155 | 155 | // only redefine dates/times/timestamps that are not wrapped in a CompositeCustomType
|
156 |
| - return java.util.Date.class.isAssignableFrom( javaType ) |
157 |
| - && !CompositeCustomType.class.isAssignableFrom( expectedType ); |
| 156 | + if (expectedType == null) |
| 157 | + return java.util.Date.class.isAssignableFrom( javaType ); |
| 158 | + else |
| 159 | + return java.util.Date.class.isAssignableFrom( javaType ) && !CompositeCustomType.class.isAssignableFrom( expectedType.getClass() ); |
158 | 160 | }
|
159 | 161 |
|
160 | 162 | private static class ParameterImpl implements Parameter {
|
|
0 commit comments