diff --git a/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java b/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java
index bdf531d62..eae8cc1db 100644
--- a/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java
+++ b/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2011 the original author or authors.
+ * Copyright 2011-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -57,6 +57,14 @@ public class MergingPersistenceUnitManager extends DefaultPersistenceUnitManager
}
}
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager#isPersistenceUnitOverrideAllowed()
+ */
+ protected boolean isPersistenceUnitOverrideAllowed() {
+ return true;
+ }
+
void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui, PersistenceUnitInfo oldPui) {
for (URL url : oldPui.getJarFileUrls()) {
@@ -68,6 +76,14 @@ public class MergingPersistenceUnitManager extends DefaultPersistenceUnitManager
}
}
+ for (String className : oldPui.getManagedClassNames()) {
+
+ if (!pui.getManagedClassNames().contains(className)) {
+ log.debug("Adding class {} to PersistenceUnit {}", className, pui.getPersistenceUnitName());
+ pui.addManagedClassName(className);
+ }
+ }
+
pui.addJarFileUrl(oldPui.getPersistenceUnitRootUrl());
}
}
diff --git a/src/test/java/org/springframework/data/jpa/support/MergingPersistenceUnitManagerUnitTests.java b/src/test/java/org/springframework/data/jpa/support/MergingPersistenceUnitManagerUnitTests.java
index 193670973..cb6b771f4 100644
--- a/src/test/java/org/springframework/data/jpa/support/MergingPersistenceUnitManagerUnitTests.java
+++ b/src/test/java/org/springframework/data/jpa/support/MergingPersistenceUnitManagerUnitTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2011 the original author or authors.
+ * Copyright 2011-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,6 +15,8 @@
*/
package org.springframework.data.jpa.support;
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.net.MalformedURLException;
@@ -27,6 +29,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
+import org.springframework.data.jpa.domain.sample.Role;
+import org.springframework.data.jpa.domain.sample.User;
import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo;
/**
@@ -53,4 +57,17 @@ public class MergingPersistenceUnitManagerUnitTests {
manager.postProcessPersistenceUnitInfo(newInfo, oldInfo);
verify(newInfo).addJarFileUrl(jarFileUrl);
}
+
+ @Test
+ public void mergesManagedClassesCorrectly() {
+
+ MergingPersistenceUnitManager manager = new MergingPersistenceUnitManager();
+ manager.setPersistenceXmlLocations(new String[] { "classpath:org/springframework/data/jpa/support/persistence.xml",
+ "classpath:org/springframework/data/jpa/support/persistence2.xml" });
+ manager.preparePersistenceUnitInfos();
+
+ PersistenceUnitInfo info = manager.obtainPersistenceUnitInfo("pu");
+ assertThat(info.getManagedClassNames().size(), is(2));
+ assertThat(info.getManagedClassNames(), hasItems(User.class.getName(), Role.class.getName()));
+ }
}
diff --git a/src/test/resources/org/springframework/data/jpa/support/persistence.xml b/src/test/resources/org/springframework/data/jpa/support/persistence.xml
new file mode 100644
index 000000000..230d4bb2a
--- /dev/null
+++ b/src/test/resources/org/springframework/data/jpa/support/persistence.xml
@@ -0,0 +1,6 @@
+
+
+
+ org.springframework.data.jpa.domain.sample.User
+
+
diff --git a/src/test/resources/org/springframework/data/jpa/support/persistence2.xml b/src/test/resources/org/springframework/data/jpa/support/persistence2.xml
new file mode 100644
index 000000000..756e2aa4a
--- /dev/null
+++ b/src/test/resources/org/springframework/data/jpa/support/persistence2.xml
@@ -0,0 +1,6 @@
+
+
+
+ org.springframework.data.jpa.domain.sample.Role
+
+