我遇到JPA问题并将数据持久存储到数据库中。 我有以下课程
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数据库时,它表示该表是一个空集。没有数据保存到数据库。
我尝试了各种各样的事情并尝试在坚持之后添加flush(),但没有运气。
为什么我似乎无法正常工作?有什么想法吗?
答案 0 :(得分:2)
在SaveTestfixture(Testfixture t)
您希望不使用em.close();
,而是使用Close();
此外,为什么此方法使用@Transactional