java - 线程中出现异常 "Thread-10"java.lang.IllegalStateException

标签 java multithreading hibernate javafx h2

除了我试图用数据填充的四个表中的每一个表之外,我不太确定如何阐明这个问题,有时其中一些表只是空的。我无法预测哪些会是空的。它可以是 1 和 2,或者只是 3,或者除了一个表之外的所有表。当其中一张表未填充时,我最终会进入 rollback() catch block 。有时它们都起作用。这与某种线程中断有关。鉴于下面的代码和异常,会出现什么问题?

对象创建和存储线程:

    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):

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: app.model.Incident@3852db6c 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: app.model.Incident@50a1f930 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: app.model.Incident@2e557d5 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: app.model.Incident@7167a75 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: app.model.Incident@13b2cc25 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: app.model.Incident@460c35f7 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: app.model.Incident@194aa755 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: app.model.Incident@599e1650 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: app.model.Incident@3d568923 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: app.model.Incident@21623389 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: app.model.Incident@85fa696 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: app.model.Incident@19263140 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: app.model.Incident@13de5a30 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: app.model.Incident@7ed84185 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: app.model.Incident@62eea24 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: app.model.Incident@a1b8252 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: app.model.Incident@1d2a61de 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: app.model.Incident@2c52980f 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: app.model.Incident@15e2781d 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: app.model.Incident@64e2ee25 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: app.model.Incident@26aaf37f 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: app.model.Incident@5b020754 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: app.model.Incident@23c1fd3e 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: app.model.Incident@48f40902 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: app.model.Incident@38c553b0 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: app.model.Incident@6f1ddc45 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: app.model.Incident@3a66baff 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: app.model.Incident@3e0db801 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 - 您正在捕获异常。这太宽泛了。

问题 #3 - 当您调用 rollback 时,似乎没有要回滚的事务。

我希望如果您解决问题 #1 和 #2,问题 #3 的原因就会被揭示。

关于java - 线程中出现异常 "Thread-10"java.lang.IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44566424/

相关文章:

java - 如何分割彩色线?

java - OpenCV 安卓工作室

c# - 使用 ReaderWriterLockSlim 调试死锁

c++ - boost::barrier性能低,等待操作

客户端中的 Java/Hibernate 并具有重新连接功能

hibernate - @UniqueConstraint 检查 JPA 中的多个表

Java 2D 图形 BufferedImage FillRect 问题

java fifo队列允许推回?

java - 方法产量如何工作?

java - 一对多:让 Hibernate 选择引用的 id 而不是加入它