2016-02-26 88 views
0

我遇到JPA問題,並將數據保存到數據庫中。 我有以下類JPA EntityManager不會持續

public class Grabber { 

    private EntityManagerFactory emfactory; 
    private EntityManager entitymanager; 

    public EntityManager getManager(){ 
     emfactory = Persistence.createEntityManagerFactory("DSLTestV4"); 
     entitymanager = emfactory. 
       createEntityManager(); 
     entitymanager.getTransaction().begin(); 
     return entitymanager; 

    } 

    public void Close(){ 
     entitymanager.getTransaction().commit(); 
     entitymanager.close(); 
     emfactory.close(); 
    } 

} 

而下面至極延伸抓取

public class TestfixtureGrabber extends Grabber{ 

    public List<Testfixture> getAll(){ 

     EntityManager manager = getManager(); 
     List<Testfixture> result = manager.createNamedQuery("Testfixture.findAll").getResultList(); 
     Close(); 
     return result;  
    } 

    public Testfixture getById(int id){ 
     EntityManager manager = getManager(); 
     TypedQuery<Testfixture> query = manager.createQuery("SELECT w FROM User w WHERE w.user=" +id ,Testfixture.class); 

     Testfixture result = query.getSingleResult(); 
     Close(); 
     return result; 
    } 

    @Transactional 
    public int SaveTestfixture(Testfixture t){ 
     EntityManager em = getManager(); 
     em.persist(t); 
     em.flush(); 
     int id = t.getId(); 
     em.close(); 
     return id; 
    } 

} 

的取出操作工作得很好,當我保存實體得到一個ID,並以某種方式保存到本地上下文。但是當我檢查我的MySQL數據庫時,它說這個表是一個空集。沒有數據被保存到數據庫。

我已經嘗試了各種各樣的東西,並嘗試添加刷新()後堅持,但沒有運氣。

爲什麼我似乎無法得到這個工作?有任何想法嗎?

+0

所以您提交事務之前關閉的EntityManager? –

+0

你沒有提交你的交易。另外,EMF應該只被創建一次。創建它是一個代價高昂的操作,讀取所有元數據,註釋等。您還應該遵守Java命名約定,使用try-finally來確保em始終關閉等。 –

回答

2

SaveTestfixture(Testfixture t)要不要使用

em.close();Close();

而且爲什麼註解此方法@Transactional

+0

不,但我很簡單 –

+0

是!當然,不能告訴你我是如何錯過的!太棒了! :) 這是註釋,因爲我litterally嘗試了一切。甚至下降了祈禱.. 謝謝你可怕的袋熊(Y):D –