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 + +