2013-03-17 53 views
1

我正在使用實體管理器創建JPA條目的程序。 過程中我沒有得到任何錯誤未創建或檢索JPA條目

... 
factory = Persistence.createEntityManagerFactory("perst"); 
EntityManager entityManager = factory.createEntityManager(); 

entityManager.getTransaction().begin(); 
entityManager.persist(object); 
entityManager.getTransaction().commit(); 

... 

entityManager.close(); 

我創建了一個程序一樣跟讀的數據,但它不返回任何數據, 查詢將返回空。可能是什麼原因 ?

這是讀取數據的程序:

static List<String> classList = new ArrayList<String>(); 
    private static EntityManagerFactory factory; 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     factory = Persistence.createEntityManagerFactory("perst"); 
     EntityManager entityManager = factory.createEntityManager(); 

     classList.add("LeaveRequest"); 
     classList.add("person"); 

     for (Object classOjc : classList) { 

      String className = classOjc.toString(); 

      Query query = entityManager.createQuery("SELECT p FROM " + className + " p"); 

      @SuppressWarnings("rawtypes") 
      List resultList = query.getResultList(); 

      System.out.println(resultList.size()); 

      for (Object result : resultList) { 

       System.out.println(result.toString()); 
      } 
     } 
    } 

的XML堅持是:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
    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"> 


    <persistence-unit name="perst" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <class>LeaveRequest</class> 
     <class>person</class> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" /> 
      <property name="javax.persistence.jdbc.url" 
       value="jdbc:derby:/home/vogella/databases/simpleDb;create=true" /> 
      <property name="javax.persistence.jdbc.user" value="Sales" /> 
      <property name="javax.persistence.jdbc.password" value="" /> 
      <!-- EclipseLink should create the database schema automatically --> 
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 
      <property name="eclipselink.ddl-generation.output-mode" 
       value="database" /> 
      <property name="eclipselink.logging.level" value="SEVERE" /> 
      <property name="eclipselink.logging.exceptions" value="true" /> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

如果您沒有收到任何錯誤,並且返回列表的大小爲0,那麼它只是表示這些表中沒有任何內容。你在使用哪個數據庫?每次啓動應用程序時都重新創建模式嗎? – 2013-03-17 18:19:29

+0

首先,我建議你寫一個JUnit測試,而不是上面的這個邏輯。另外,很高興看到你的'persistence.xml'來查看配置。 – 2013-03-17 18:53:47

+0

@ JBNizet-我在輸入數據時沒有得到錯誤,所以我猜這些條目應該是持久的,(如果沒有我認爲我在提交失敗)有一種方法在創建條目時驗證過程成功了嗎?數據庫是德比與eclipselink – 2013-03-17 19:54:22

回答

1

您配置的EclipseLink下降和每個應用程序啓動時重新創建架構:

<property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 

很顯然,如果您運行的第一個應用程序持續一些條目,然後一個se cond應用程序嘗試讀取第一個已寫入的內容,因爲eclipselink會丟棄所有內容並每次都重新創建模式,所以不會再找到任何內容。