线程“Thread-10”中的异常java.lang.IllegalStateException

问题描述:

我不太清楚如何解释这个问题,而不是我想要用数据填充的四个表中的每一个,有时其中一些是只是空着。我无法预测哪些是空的。它可能是1和2,或者只有3,或者只有一个表。当其中一个表没有被填充时,我会在rollback()catch块中结束。有时他们都工作。这与某种线程中断有关。鉴于下面的代码和例外情况,会出现什么问题?线程“Thread-10”中的异常java.lang.IllegalStateException

线程对象创建和存储:

new Thread(() -> { 
     /* Loop through the "primary key" incidentNumber to create list of objects in memory */ 
     for (int i = 0; i < incidentNumberList.size(); i++) { 
       Incident incident = new Incident(); 

       /* Save Incidents to Local H2 Database */ 
       if (!(targetDateList.get(i).isEmpty())) { 
        try { 
         String targetDate = DateUtil.formatTargetDate(targetDateList.get(i)); 
         String timeRemaining = DateUtil.getTimeRemaining(targetDateList.get(i)); 

         try { 
          // Make sure no transactions are currently running to avoid JPA Error 
          if (!entityManager.getTransaction().isActive()) { 
           // Begin saving Incident objects to H2 
           entityManager.getTransaction().begin(); 
           incident.setIncidentNumber(incidentNumberList.get(i)); 
           incident.setSummary(summaryList.get(i)); 
           incident.setRequestId(requestIdList.get(i)); 
           incident.setPriority(priorityList.get(i)); 
           incident.setLastModifiedDate((lastModifiedDateList.get(i))); 
           incident.setStatus(statusList.get(i)); 
           incident.setTargetDate(targetDate); 
           incident.setTimeRemaining(timeRemaining); 
           incident = entityManager.merge(incident); 
           entityManager.getTransaction().commit(); 
          } 

         } catch (Exception e) { 
          entityManager.getTransaction().rollback(); 
         } 

        } catch (ParseException e) { 
         e.printStackTrace(); 
        } 
       } 

       /* Create 4 separate lists for each priority level, i.e. Low --> Critical, to populate each of the 4 TableViews */ 
       if (priorityList.get(i).equals(priorityType)) { 
        switch (priorityType) { 
         case "Low": 
          incidentObjectListGreen.add(incident); 
          break; 
         case "Medium": 
          incidentObjectListYellow.add(incident); 
          break; 
         case "High": 
          incidentObjectListOrange.add(incident); 
          break; 
         case "Critical": 
          incidentObjectListRed.add(incident); 
          break; 
        } 

        Incident finalIncident = incident; 
        Platform.runLater(() -> dataPriority.add(finalIncident)); 
       } 

      } 
    }).start(); 

例外:

Exception in thread "Thread-11" java.lang.IllegalStateException: 
Exception Description: No transaction is currently active 
    at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.rollback(EntityTransactionImpl.java:176) 
    at app.controller.TableViewController.lambda$organizeTable$2(TableViewController.java:432) 
    at java.lang.Thread.run(Thread.java:745) 
Exception in thread "Thread-10" java.lang.IllegalStateException: 
Exception Description: No transaction is currently active 
    at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.rollback(EntityTransactionImpl.java:176) 
    at app.controller.TableViewController.lambda$organizeTable$2(TableViewController.java:432) 
    at java.lang.Thread.run(Thread.java:745) 
Exception in thread "Thread-9" java.lang.IllegalStateException: 
Exception Description: No transaction is currently active 
    at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.rollback(EntityTransactionImpl.java:176) 
    at app.controller.TableViewController.lambda$organizeTable$2(TableViewController.java:432) 
    at java.lang.Thread.run(Thread.java:745) 

事件实体:

@Entity 
@Table(name = "INCIDENT") 
public class Incident implements Serializable { 

    @Id 
    @Column(name = "INCIDENTNUMBER") 
    private String incidentNumber; 

    @Column(name = "SUMMARY") 
    private String summary; 

    @Column(name = "REQUESTID") 
    private String requestId; 

    @Column(name = "PRIORITY") 
    private String priority; 

    @Column(name = "STATUS") 
    private String status; 

    @Column(name = "ASSIGNEE") 
    private String assignee; 

    @Column(name = "LASTMODIFIEDDATE") 
    private String lastModifiedDate; 

    @Column(name = "TARGETDATE") 
    private String targetDate; 

    @Column(name = "TIMEREMAINING") 
    private String timeRemaining; 

    public String getRequestId() { 
     return requestId; 
    } 

    public void setRequestId(String requestId) { 
     this.requestId = requestId; 
    } 

    public String getIncidentNumber() { 
     return incidentNumber; 
    } 

    public void setIncidentNumber(String incidentNumber) { 
     this.incidentNumber = incidentNumber; 
    } 

    public String getSummary() { 
     return summary; 
    } 

    public void setSummary(String summary) { 
     this.summary = summary; 
    } 

    public String getPriority() { 
     return priority; 
    } 

    public void setPriority(String priority) { 
     this.priority = priority; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public String getAssignee() { 
     return assignee; 
    } 

    public void setAssignee(String assignee) { 
     this.assignee = assignee; 
    } 

    public String getLastModifiedDate() { 
     return lastModifiedDate; 
    } 

    public void setLastModifiedDate(String lastModifiedDate) { 
     this.lastModifiedDate = lastModifiedDate; 
    } 

    public String getTargetDate() { 
     return targetDate; 
    } 

    public void setTargetDate(String targetDate) { 
     this.targetDate = targetDate; 
    } 

    public String getTimeRemaining() { 
     return timeRemaining; 
    } 

    public void setTimeRemaining(String timeRemaining) { 
     this.timeRemaining = timeRemaining; 
    } 
} 

堆栈跟踪:

java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at app.controller.TableViewController.lambda$organizeTable$3(TableViewController.java:430) 
    at java.lang.Thread.run(Thread.java:745) 

我觉得你的问题在这里:

} catch (Exception e) { 
     entityManager.getTransaction().rollback(); 
    } 

问题#1 - 你是压垮例外。您不会打印该消息,也不会记录堆栈跟踪。没有。您只需扔掉所有可用于诊断问题的信息。

问题#2 - 您正在捕捉Exception。这太宽泛了。

问题#3 - 看起来,当你到达呼叫rollback时,没有事务回滚。

我认为如果您解决问题#1和#2,问题#3的原因将被揭示。

+0

没错。感谢您指出了这一点。我已经添加了堆栈跟踪并更新了我的问题。望着它... – santafebound

+0

是的。它解释了你的问题的根源。尝试搜索有关* that *异常消息的问答。 –