Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA EntityManager不删除实体_Java_Jpa_Entities - Fatal编程技术网

Java JPA EntityManager不删除实体

Java JPA EntityManager不删除实体,java,jpa,entities,Java,Jpa,Entities,我想从数据库中删除实体列表。 列表letterToDel-实体列表。我试着用很多方法删除这个列表 我创建一个事务并删除循环中的每个实体 我为循环中的每个删除创建新事务 在案例1,2中没有例外,但实体没有删除 我尝试使用查询删除实体 在案例3中,有一个例外: javax.persistence.TransactionRequiredException: Executing an update/delete query 我做错了什么?代码应该在执行查询之前创建一个事务 try { Ent

我想从数据库中删除实体列表。
列表letterToDel
-实体列表。我试着用很多方法删除这个列表

  • 我创建一个事务并删除循环中的每个实体
  • 我为循环中的每个删除创建新事务
  • 在案例1,2中没有例外,但实体没有删除

  • 我尝试使用查询删除实体
  • 在案例3中,有一个例外:

    javax.persistence.TransactionRequiredException: Executing an update/delete query
    

    我做错了什么?

    代码应该在执行查询之前创建一个事务

    try {
         EntityTransaction trx = em.getTransaction();
         trx.begin();   
          for (LetterEntity l : lettersToDel) {
                  em.createQuery("delete  from LetterEntity l where l = :letter")
                     .setParameter("letter", l)
                     .executeUpdate();
         trx.commit();
          }
        } catch (Exception e) {
            e.printStackTrace();
        }
    

    对于案例3,这是正常的。您需要一个事务来执行更新。(如果使用Spring,只需将@Transactional注释添加到方法中即可)


    对于1和2,是否使用trx.rollback();在你的最后陈述中?

    不,它不会进入最后阶段,我不知道为什么。下面的解决方案是可行的,但是为什么使用EntityManager进行删除不可行呢?@MaryRyllo很高兴我能帮上忙。
    
        try {
          for (LetterEntity l : lettersToDel) {
                  em.createQuery("delete  from LetterEntity l where l = :letter")
                     .setParameter("letter", l)
                     .executeUpdate();
          }
        } catch (Exception e) {
            e.printStackTrace();
        }
    
    javax.persistence.TransactionRequiredException: Executing an update/delete query
    
    try {
         EntityTransaction trx = em.getTransaction();
         trx.begin();   
          for (LetterEntity l : lettersToDel) {
                  em.createQuery("delete  from LetterEntity l where l = :letter")
                     .setParameter("letter", l)
                     .executeUpdate();
         trx.commit();
          }
        } catch (Exception e) {
            e.printStackTrace();
        }