几天来,我一直在尝试保存从导入的 Excel 表中的 jtable 获得的数据,但没有成功,并且试图找到异常令人作呕。
这是代码的一部分和错误堆栈跟踪
@Action
public void persist(){
emf = Persistence.createEntityManagerFactory("MauranaSurveyPU");
em = emf.createEntityManager();
em.getTransaction().begin();
//loops through table to retrieve object and persist
int count = jTable1.getRowCount();
for(int i=0; i<count; i++){
Mauranagroup mn = new Mauranagroup();
String obj1 = (String)GetData(jTable1,i,0);
String obj2 = (String)GetData(jTable1,i,1);
String obj3 = (String)GetData(jTable1,i,2);
//set entity
mn.setRespondentId(Integer.parseInt(obj1));
mn.setMale(obj2);
mn.setFemale(obj3);
em.persist(mn);
}//end for
em.getTransaction().commit();
}//end method persist
// get object from jtable
private Object GetData(JTable jTable1, int x, int y) {
return jTable1.getModel().getValueAt(x,y);
}
这段代码的问题在于它实际上仍然存在,但是在事务提交后我得到了这个堆栈跟踪;
内部异常:java.sql.SQLIntegrityConstraintViolationException:该语句被中止,因为它会导致在“MAURANAGROUP”上定义的“SQL130204062549290”标识的唯一或主键约束或唯一索引中出现重复键值。错误代码:20000 调用:INSERT INTO MAURANAGROUP (RESPONDENT_ID, AMOUNTTOBESPENT, AREYOUFAMILIARNO
bind => [211 个参数绑定] 查询:InsertObjectQuery(entity.Mauranagroup[ respondentId=5 ])
当我删除记录并再次保留时,我得到另一行
bind => [211 个参数绑定] 查询:在 org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324) 处的 InsertObjectQuery(entity.Mauranagroup[ respondentId=2 ])
我不明白是吗,它实际上仍然存在,我可以看到我保存的数据。是循环还是循环没有很好地终止,我实际上是因为这个项目而生病了。