|
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