2012-12-01 71 views
4

我只是想了解JSF和JPA,但每當我嘗試將一個對象持久存儲到數據庫中似乎都不會寫出來。 下面是我使用的代碼:JPA堅持不寫入數據庫

@Named 
@ManagedBean 
@SessionScoped 
public class BestemmingController implements Serializable{ 

@PersistenceUnit(unitName="RealDolmenTravelShopPU") 
@PersistenceContext(unitName="RealDolmenTravelShopPU") 

EntityManagerFactory emf = null; 
public void submit(){ 


     try{ 
      emf = Persistence.createEntityManagerFactory("RealDolmenTravelShopPU"); 

      EntityManager em = emf.createEntityManager(); 

      //EntityTransaction et = em.getTransaction(); 
      //et.begin(); 

      Bestemming nieuweBestemming = new Bestemming(); 

      Land gezochtLand = em.find(Land.class, selectedLand); 

      nieuweBestemming.setLand(gezochtLand); 
      nieuweBestemming.setNaam(bestemmingNaam); 

      em.persist(nieuweBestemming); 

      //et.commit(); 
      //em.flush(); 
      em.close(); 
     }catch (Exception e){ 
      e.printStackTrace(); 
     }finally{ 
      emf.close(); 
     } 
    } 

我嘗試使用EntityTransaction,但它只是停止了我的應用程序,沒有任何錯誤或任何東西。所以我放棄了它,但它仍然沒有寫下來。 然後我試着獨立地調用flush,但是這也沒有做任何事。 我真的難住,爲什麼這不工作。這可能是一些新手的錯誤,但如果有人在這裏可以幫助我,我會愛上它。

在此先感謝!

+1

除非使用允許非事務寫入的JPA實現(例如DataNucleus JPA),否則必須有事務才能將數據寫入數據存儲(按照JPA規範)。解決你的錯誤使用該路線 – DataNucleus

+0

@DataNucleus我試着把事務重新放回來,也嘗試使用此回顯一些文本回我的頁面:'FacesContext.getCurrentInstance()。addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO, 「abcd」,「dcba」));' 當我離開交易時,它顯示消息,否則不顯示... – Firenter

+0

顯示您的persistence.xml,您使用的是什麼JPA impl? – xeye

回答

0

首先,你能寫日誌嗎?在指定持久性單元使用JTA時啓動事務將引發異常,因此很可能您剛剛在容器日誌文件中丟失了異常。

其次,這是一個JTA PU,所以它需要一個JTA事務開始,EM被關聯到,並且您需要注入EM,而不是自己創建一個工廠。退房JPA應用服務器實例這裏先來看看他們是如何設置: http://wiki.eclipse.org/EclipseLink/Examples/JPA

+0

是的,我剛剛發現自己,我打算在這裏發佈。我將JTA設置爲RESOURCE_LOCAL,它解決了問題。 – Firenter

0

嘿,我找到了原因是,該交易沒有運行:我以前沒有使用JTA的實現,它使用一個RESOURCE_LOCAL持久性單元。當我建立我的項目時,這只是我看過的東西。

好東西我的朋友告訴我檢查服務器日誌。