线程“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的原因将被揭示。
没错。感谢您指出了这一点。我已经添加了堆栈跟踪并更新了我的问题。望着它... – santafebound
是的。它解释了你的问题的根源。尝试搜索有关* that *异常消息的问答。 –