2013-02-04 50 views
1

我一直在嘗試幾天,以保持從導入的Excel工作表中獲得的數據沒有成功,並試圖找到異常令人作嘔。如何保存通過JPA從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 [respondentId = 5])

當我刪除的記錄和再持續,我得到另一條線

綁定=> [211個參數綁定] 查詢:InsertObjectQuery(entity.Mauranag roup [respondentId = 2]) 在org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)

我不理解是,它實際上依然存在,我可以看到我保存的數據。這是循環還是循環沒有終止,因爲這個項目我實際上生病了。

回答

0

表中有一個DB約束條件,即某列的唯一性,並且您插入的是重複值。我想這是RESPONDENT_ID。如果你想第一次保存表中的所有記錄,我不會提供表數據中的id。相反,我會使用序列爲您生成id並將其返回給用戶界面。

如果您試圖修改存儲在表中的現有數據。我會使用ID在數據庫中搜索它們,更新字段並再次保留它們。

btw。最好在開始時用小寫字母命名您的方法。

+0

我嘗試使用generatedValue,但不知道如何使用它,它一直說RespondentId不能接受空值,我實際上改變了@GeneratedValue和策略爲汽車,似乎並沒有工作,我也嘗試使用一個Random對象,它工作sortof但似乎影響了我的查詢結果 – user2041176