我已经尝试了数天,无法持久保存从导入的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
  
  绑定=> [211个参数绑定]
  查询:InsertObjectQuery(entity.Mauranagroup [responseentId = 5])


当我删除记录并再次坚持时,我得到另一行


  绑定=> [211个参数绑定]
  查询:InsertObjectQuery(entity.Mauranagroup [responseentId = 2])
      在org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)


我不明白,它实际上仍然存在,我可以看到我保存的数据。是循环还是循环终止得不好,由于这个项目,我实际上生病了。

最佳答案

表上有一个数据库约束,其中某些列是唯一的,并且您要插入重复值。我猜是RESPONDENT_ID。如果您是第一次尝试将表中的所有记录持久化,那么我不会提供表数据中的ID。相反,我将使用序列为您生成ID并将其返回到UI。

如果您要修改表中存储的现有数据。我会使用ID在数据库中搜索它们,更新字段并再次保存它们。

顺便说一句最好在开头用小写字母命名您的方法。

09-10 04:19