JPA EntityManager不会持续
问题描述:
我遇到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数据库时,它说这个表是一个空集。没有数据被保存到数据库。
我已经尝试了各种各样的东西,并尝试添加刷新()后坚持,但没有运气。
为什么我似乎无法得到这个工作?有任何想法吗?
答
在SaveTestfixture(Testfixture t)
要不要使用
em.close();
但Close();
而且为什么注解此方法@Transactional
+0
不,但我很简单 –
+0
是!当然,不能告诉你我是如何错过的!太棒了! :) 这是注释,因为我litterally尝试了一切。甚至下降了祈祷.. 谢谢你可怕的袋熊(Y):D –
所以您提交事务之前关闭的EntityManager? –
你没有提交你的交易。另外,EMF应该只被创建一次。创建它是一个代价高昂的操作,读取所有元数据,注释等。您还应该遵守Java命名约定,使用try-finally来确保em始终关闭等。 –