JPA EntityManager不会保留

时间:2016-02-26 08:47:20

标签: java mysql jpa

我遇到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(),但没有运气。

为什么我似乎无法正常工作?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

SaveTestfixture(Testfixture t)

您希望不使用em.close();,而是使用Close();

此外,为什么此方法使用@Transactional

进行注释
相关问题