2015-10-14 32 views
0

我正在做一个简单的测试。我在数据库中放入了一个Project实体,然后将其删除。该代码没有提供任何错误,但不会删除该实体。下面是main和两种方法的代码。欢迎任何帮助。方法不会从数据库中删除 - JPA

测试

public static void main(String[] args) { 
    EntityManager em = EmFactory.getEntityManager(); // My class gives EntityManagaer instances        
    EntityTransaction tx = em.getTransaction();         
    Project p = new Project(); 
    p.setProjectKey("Key"); 
    ProjectDAO dao = FactoryDAO.newProjectDAO(); 

    dao.addProject(p); 
    dao.deleteProject(p); 

    em.close();                 
} 

Add方法

public void addProject(Project project) { 
    EntityManager em = EmFactory.getEntityManager(); 
    EntityTransaction tx = em.getTransaction(); 
    try{ 
     tx.begin(); 
     em.persist(project); 
     tx.commit(); 
    } 
    catch(PersistenceException e){ 
     tx.rollback(); 
     throw e; 
    } 
} 

删除方法

public void deleteProject(Project p) { 
    EntityManager em = EmFactory.getEntityManager(); 
    EntityTransaction tx = em.getTransaction();  
    try{ 
     tx.begin(); 
     p = em.merge(p); 
     em.remove(p); 
     tx.commit(); 
    } 
    catch(PersistenceException e){ 
     tx.rollback(); 
     throw e; 
    } 
    em.close();  
} 
+0

看起来你和主方法中启动的事务处于同一个事务,并且em.close()似乎没有提交你的事务。 – JEY

回答

0

无需调用merge之前delete

为了从它必须首先是 检索,然后在一个活动事务,它 可以使用remove方法删除的数据库中删除一个对象。