2012-04-17 16 views
7

:Neden <hariç-listelenmemiş sınıflar> false</ exclude-unlisted-classes> çalışmaz? Bu <code>persistence.xml</code> ile

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

ve basit bir 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)); 
    } 
} 

alıyorum

[EL Uyarı]: 2012-04-17 15: 08: 18.476-- Metamodel tiplerinin toplanması boş. Java SE ve bazı Java EE konteynır yönetimli kalıcılık birimleri için kurum araması sırasında model sınıfları bulunamadı. senin varlık sınıfları <class> elemanları veya

<class> unsurların bir sürü <exclude-unlisted-classes>false</exclude-unlisted-classes> değiştirdikten sonra sorun sabitlenebilir

küresel <exclude-unlisted-classes>false</exclude-unlisted-classes> elemanı kullanarak persistence.xml başvurulan doğrulamak ama tercih ediyorum Lütfen değil Her zaman yeni bir varlık eklemek veya eski bir tane kaldırmak için persistence.xml düzenlemek için hatırlamak zorunda. Neden sürüm <exclude-unlisted-classes> ile çalışmıyor? Ben benzer bir durum

Ben JPA Metamodel üretmek durumunda

karşı karşıya vardı

+6

'persistence.xml' ve notlandırılmış sınıflarınız farklı sınıf yolu klasörlerinde olabilir mi? Http://stackoverflow.com/questions/4885836/no-autodetection-of-jpa-entities-in-maven-verify – axtavt

+1

Evet, işe yaradı. Teşekkürler! (Bunun dışında '$ {project.build.outputDirectory}' genişleyemezdi ve ben onu yerine koydum '../ sınıflar', birazcık kötü ama eğer yapsam onunla yaşayabilirim.) –

+1

@axtavt İsterseniz Bunu bir cevap olarak göndermek için kabul edebilirim. –

cevap

1

doğru pacakge yapıştırın ve svn için bunu kontrol kopyalamak ve devre dışı metamodel nesil tüm junit testleri

i Metamodel oluşturursanız gayet junit anda her yapı ile -

benim src/testinde /resources/META-INF/persistence.xml bu yapmak zorunda gömülü glassfish tüm ejb ve metamodel cezası bulacaksınız, ama sigara ejb junit başarısız olur

<persistence-unit name="test-xxx" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <jar-file>file:../classes</jar-file> 
    <shared-cache-mode>ALL</shared-cache-mode> 
    <properties> 
     <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.oracle.Oracle11Platform"/> 
     <property name="eclipselink.logging.timestamp" value="true"/> 
     <property name="eclipselink.logging.thread" value="true"/> 
     <property name="eclipselink.logging.level" value="FINE"/> 
     <property name="eclipselink.logging.parameters" value="true"/> 
     <property name="eclipselink.logging.logger" value="JavaLogger"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xxx"/> 
     <property name="javax.persistence.jdbc.password" value="xxx"/> 
     <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/> 
     <property name="javax.persistence.jdbc.user" value="xxx"/> 
    </properties> 
</persistence-unit> 
+0

Gerçekten böyle " dosya: ../ com/paket? – webyildirim

+0

gibi sınıf paketlerini geçirebilirsiniz java nasıl çalışır, her zaman com veya etc etc üstüne dir ile classpath inşa –

İlgili konular