From f32e4077fae1ce986ca565c73b1703f74dd6ba31 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 6 Sep 2012 19:22:20 +0200 Subject: [PATCH] same-named unit from persistence.xml overrides in case of conflict with default unit Issue: SPR-9741 --- .../DefaultPersistenceUnitManager.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java index 807b8ae2d7..e7832284bc 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java @@ -21,7 +21,6 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.net.URL; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; @@ -375,10 +374,18 @@ public class DefaultPersistenceUnitManager * as defined in the JPA specification. */ private List readPersistenceUnitInfos() { - PersistenceUnitReader reader = new PersistenceUnitReader(this.resourcePatternResolver, this.dataSourceLookup); List infos = new LinkedList(); - infos.addAll(Arrays.asList(reader.readPersistenceUnitInfos(this.persistenceXmlLocations))); - if (this.packagesToScan != null || this.mappingResources != null) { + boolean buildDefaultUnit = (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()); } return infos;