Pourquoi peut - <exclude-unlisted-classes>false</exclude-unlisted-classes> ne pas fonctionner?
Avec cette persistence.xml
:
<?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>
et un test simple:
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));
}
}
- Je obtenir
[EL Avertissement]: 2012-04-17 15:08:18.476--La collection de types de méta-modèle est vide. Modèle de classes n'aient pas été trouvé lors de l'entité de recherche pour Java SE et certains Java EE container managed persistence unités. Veuillez vérifier que vos classes d'entités sont référencés dans persistence.xml en utilisant soit
<class>
éléments ou global<exclude-unlisted-classes>false</exclude-unlisted-classes>
élément
Après le remplacement de <exclude-unlisted-classes>false</exclude-unlisted-classes>
avec beaucoup de <class>
éléments, le problème peut être résolu, mais je préférerais ne pas avoir à vous rappeler de le modifier persistence.xml
à chaque fois que je besoin d'ajouter une nouvelle entité ou supprimer une ancienne. Pourquoi ne pas la version avec <exclude-unlisted-classes>
travail?
- Pourrait votre
persistence.xml
et annoté classes différentes classpath dossiers? Voir stackoverflow.com/questions/4885836/... - Oui, cela a fonctionné. Merci! (Sauf qu'il ne serait pas étendre
${project.build.outputDirectory}
et je l'ai remplacé par../classes
; un peu méchant, mais je peux vivre avec ça si je dois le faire.) - Vous pouvez poster qu'une réponse afin que je puisse l'accepter.
- Dans Eclipse, lorsque vous avez ajouté que le projet de la facette 'APP', vous pouvez faire un clic droit sur l'persistence.xml fichier => Sélectionnez "JPA Outils" > 'Synhronize liste de classe'.
Vous devez vous connecter pour publier un commentaire.
J'avais été logés à la même situation
Si je générer JPA méta-modèle, copier coller dans le bon paquet et svn, et désactiver le méta-modèle de la génération, de tous les junit tests ont été fine
si je créer un métamodèle avec chaque version, à junit temps - glassfish embarqué trouverez tous les ejb et métamodèle d'amende, mais non ejb junit échouera
J'ai eu à faire dans ma src/test/resources/META-INF/persistence.xml