|
17 | 17 | package org.springframework.orm.hibernate4; |
18 | 18 |
|
19 | 19 | import java.io.IOException; |
| 20 | +import java.lang.annotation.Annotation; |
| 21 | +import java.util.LinkedHashSet; |
| 22 | +import java.util.Set; |
20 | 23 | import javax.persistence.Embeddable; |
21 | 24 | import javax.persistence.Entity; |
22 | 25 | import javax.persistence.MappedSuperclass; |
@@ -70,10 +73,25 @@ public class LocalSessionFactoryBuilder extends Configuration { |
70 | 73 |
|
71 | 74 | private static final String PACKAGE_INFO_SUFFIX = ".package-info"; |
72 | 75 |
|
73 | | - private static final TypeFilter[] ENTITY_TYPE_FILTERS = new TypeFilter[] { |
74 | | - new AnnotationTypeFilter(Entity.class, false), |
75 | | - new AnnotationTypeFilter(Embeddable.class, false), |
76 | | - new AnnotationTypeFilter(MappedSuperclass.class, false)}; |
| 76 | + |
| 77 | + private static final Set<TypeFilter> entityTypeFilters; |
| 78 | + |
| 79 | + static { |
| 80 | + entityTypeFilters = new LinkedHashSet<TypeFilter>(4); |
| 81 | + entityTypeFilters.add(new AnnotationTypeFilter(Entity.class, false)); |
| 82 | + entityTypeFilters.add(new AnnotationTypeFilter(Embeddable.class, false)); |
| 83 | + entityTypeFilters.add(new AnnotationTypeFilter(MappedSuperclass.class, false)); |
| 84 | + try { |
| 85 | + @SuppressWarnings("unchecked") |
| 86 | + Class<? extends Annotation> converterAnnotation = (Class<? extends Annotation>) |
| 87 | + LocalSessionFactoryBuilder.class.getClassLoader().loadClass("javax.persistence.Converter"); |
| 88 | + entityTypeFilters.add(new AnnotationTypeFilter(converterAnnotation, false)); |
| 89 | + } |
| 90 | + catch (ClassNotFoundException ex) { |
| 91 | + // JPA 2.1 API not available - Hibernate <4.3 |
| 92 | + } |
| 93 | + } |
| 94 | + |
77 | 95 |
|
78 | 96 | private final ResourcePatternResolver resourcePatternResolver; |
79 | 97 |
|
@@ -220,7 +238,7 @@ else if (className.endsWith(PACKAGE_INFO_SUFFIX)) { |
220 | 238 | * the current class descriptor contained in the metadata reader. |
221 | 239 | */ |
222 | 240 | private boolean matchesEntityTypeFilter(MetadataReader reader, MetadataReaderFactory readerFactory) throws IOException { |
223 | | - for (TypeFilter filter : ENTITY_TYPE_FILTERS) { |
| 241 | + for (TypeFilter filter : entityTypeFilters) { |
224 | 242 | if (filter.match(reader, readerFactory)) { |
225 | 243 | return true; |
226 | 244 | } |
|
0 commit comments