Mit diesem persistence.xml
:Warum konnte <exclude-unlisted-classes> false</ exclude-nichtlisted-classes> nicht funktionieren?
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="ODP_Server_Test"
transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<!-- <non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/ODPServerDataSource)</non-jta-data-source> -->
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:unit-testing;create=true" />
<property name="javax.persistence.jdbc.user" value="" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.target-database" value="DERBY" />
</properties>
</persistence-unit>
</persistence>
und ein einfacher Test:
public class RepositoryTest {
private static Logger logger = LoggerFactory
.getLogger(RepositoryTest.class);
private static EntityManagerFactory emf;
private EntityManager em;
private RepositoryImpl repo = new RepositoryImpl();
@BeforeClass
public static void setUp() {
try {
logger.info("Starting in-memory DB for unit tests");
@SuppressWarnings("unused")
Class<?> cls = org.apache.derby.jdbc.EmbeddedDriver.class;
DriverManager.getConnection(
"jdbc:derby:memory:unit-testing;create=true").close();
} catch (Exception ex) {
ex.printStackTrace();
fail("Exception during database startup.");
}
try {
logger.info("Building JPA EntityManager for unit tests");
emf = Persistence.createEntityManagerFactory("ODP_Server_Test");
} catch (Exception ex) {
ex.printStackTrace();
fail("Exception during JPA EntityManager instantiation.");
}
}
@AfterClass
public static void tearDown() throws SQLException {
logger.info("Shutting down JPA");
if (emf != null) {
emf.close();
}
try {
DriverManager.getConnection(
"jdbc:derby:memory:unit-testing;drop=true").close();
} catch (SQLException ex) {
if (ex.getSQLState().equals("08006")) {
logger.info("DB shut down");
} else {
throw ex;
}
}
fail("DB didn't shut down");
}
@Before
public void setEM() {
em = emf.createEntityManager();
repo.setEntityManager(em);
}
@After
public void flushEM() {
if (em != null) {
em.flush();
em.close();
em = null;
}
}
@Test
public void noBlocksInEmptyDB() {
assertThat(repo.findFunBlock(1), is((FunctionalBlock) null));
}
}
ich
[EL Warnung]: 2012-04-17 15: 08: 18.476-- Die Sammlung von Metamodelltypen ist leer. Modellklassen wurden möglicherweise während der Entitätssuche nach Java SE und einigen durch Java EE-Container verwalteten Persistenzeinheiten nicht gefunden. Bitte überprüfen Sie, ob Ihre Entitätsklassen in persistence.xml referenziert werden entweder
<class>
Elemente oder ein globales<exclude-unlisted-classes>false</exclude-unlisted-classes>
Element
Nach <exclude-unlisted-classes>false</exclude-unlisted-classes>
mit vielen <class>
Elementen zu ersetzen, kann das Problem behoben werden, aber ich würde es vorziehen, nicht zu Ich muss daran denken, jedes Mal, wenn ich eine neue Entität hinzufügen oder eine alte entfernen muss, persistence.xml
zu bearbeiten. Warum funktioniert die Version mit <exclude-unlisted-classes>
nicht?
Könnten Ihre 'persistence.xml'- und annotierten Klassen in verschiedenen Klassenpfadordnern enden? Siehe http://stackoverflow.com/questions/4885836/no-autodetection-of-jpa-entities-in-maven-verify – axtavt
Ja, es hat funktioniert. Vielen Dank! (Außer es würde '$ {project.build.outputDirectory}' nicht erweitern und ich ersetzte es durch '../ classes'; ein bisschen eklig, aber ich kann damit leben, wenn ich muss.) –
@axtavt Sie können wollen um das als Antwort zu posten, damit ich es akzeptieren kann. –