same-named unit from persistence.xml overrides in case of conflict with default unit

Issue: SPR-9741
This commit is contained in:
Juergen Hoeller 2012-09-06 19:22:20 +02:00 committed by unknown
parent 10a4e88e0a
commit f32e4077fa
1 changed files with 11 additions and 4 deletions

View File

@ -21,7 +21,6 @@ import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import java.lang.reflect.Proxy;
import java.net.URL; import java.net.URL;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList; import java.util.LinkedList;
@ -375,10 +374,18 @@ public class DefaultPersistenceUnitManager
* as defined in the JPA specification. * as defined in the JPA specification.
*/ */
private List<SpringPersistenceUnitInfo> readPersistenceUnitInfos() { private List<SpringPersistenceUnitInfo> readPersistenceUnitInfos() {
PersistenceUnitReader reader = new PersistenceUnitReader(this.resourcePatternResolver, this.dataSourceLookup);
List<SpringPersistenceUnitInfo> infos = new LinkedList<SpringPersistenceUnitInfo>(); List<SpringPersistenceUnitInfo> infos = new LinkedList<SpringPersistenceUnitInfo>();
infos.addAll(Arrays.asList(reader.readPersistenceUnitInfos(this.persistenceXmlLocations))); boolean buildDefaultUnit = (this.packagesToScan != null || this.mappingResources != null);
if (this.packagesToScan != null || this.mappingResources != null) { PersistenceUnitReader reader = new PersistenceUnitReader(this.resourcePatternResolver, this.dataSourceLookup);
SpringPersistenceUnitInfo[] readInfos = reader.readPersistenceUnitInfos(this.persistenceXmlLocations);
for (SpringPersistenceUnitInfo readInfo : readInfos) {
infos.add(readInfo);
if (this.defaultPersistenceUnitName != null &&
this.defaultPersistenceUnitName.equals(readInfo.getPersistenceUnitName())) {
buildDefaultUnit = false;
}
}
if (buildDefaultUnit) {
infos.add(buildDefaultPersistenceUnitInfo()); infos.add(buildDefaultPersistenceUnitInfo());
} }
return infos; return infos;