1

インポートされた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パラメータバインド]クエリ:InsertObjectQuery(entity.Mauranagroup [respondentId = 2])at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)

私はそれが理解できません、それは実際に持続し、私は私の保存されたデータを見ることができます。それはループなのか、それともループがうまく終了していないのか、このプロジェクトのために実際に病気になっています。

4

1 に答える 1

0

一部の列が一意であり、重複する値を挿入しているというDB制約がテーブルにあります。私はそれがだと思いRESPONDENT_IDます。テーブル内のすべてのレコードを初めて永続化しようとしている場合は、テーブルデータからIDを提供しません。代わりに、シーケンスを使用してIDを生成し、UIに返します。

テーブルに保存されている既存のデータを変更しようとしている場合。IDを使用してDBでそれらを検索し、フィールドを更新して、再度永続化します。

ところで。最初に小文字でメソッドに名前を付けることをお勧めします。

于 2013-02-04T23:46:48.943 に答える