我遇到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數據庫時,它說這個表是一個空集。沒有數據被保存到數據庫。
我已經嘗試了各種各樣的東西,並嘗試添加刷新()後堅持,但沒有運氣。
爲什麼我似乎無法得到這個工作?有任何想法嗎?
所以您提交事務之前關閉的EntityManager? –
你沒有提交你的交易。另外,EMF應該只被創建一次。創建它是一個代價高昂的操作,讀取所有元數據,註釋等。您還應該遵守Java命名約定,使用try-finally來確保em始終關閉等。 –