我几天来一直试图从导入的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 =&gt; [211参数绑定] 查询:InsertObjectQuery(entity.Mauranagroup [respondentId = 5])
当我删除记录并再次存在时,我得到另一行
bind =&gt; [211参数绑定] 查询:InsertObjectQuery(entity.Mauranagroup [respondentId = 2]) 在org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)
我不明白是它,它实际上是持久的,我可以看到我保存的数据。它是循环还是循环不能很好地终止,因为这个项目我真的生病了。
答案 0 :(得分:0)
您的表上有一个数据库约束,某些列是唯一的,并且您要插入重复值。我想这是RESPONDENT_ID
。如果您是第一次尝试在表中保留所有记录,我将不会从表数据中提供id。相反,我会使用序列为您生成id并将其返回到UI。
如果您尝试修改表中存储的现有数据。我会使用id在数据库中搜索它们,更新字段并再次保留它们。
顺便说一句。最好在开头用小写字母命名方法。