java - 如何通过 JPA 持久化从 JTable 检索的实体对象?

标签 java jpa jtable

几天来我一直在尝试保存从导入的 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);
}

这段代码的问题在于它实际上仍然存在,但是在事务提交之后 我得到这个堆栈跟踪;

Internal Exception: java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL130204062549290' defined on 'MAURANAGROUP'. Error Code: 20000 Call: INSERT INTO MAURANAGROUP (RESPONDENT_ID, AMOUNTTOBESPENT, AREYOUFAMILIARNO

bind => [211 parameters bound] Query: InsertObjectQuery(entity.Mauranagroup[ respondentId=5 ])

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

bind => [211 parameters bound] Query: InsertObjectQuery(entity.Mauranagroup[ respondentId=2 ]) at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)

我不明白是不是,它实际上持续存在,我可以看到我保存的数据。是循环还是循环没有很好地终止,我实际上因为这个项目而生病了。

最佳答案

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

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

顺便说一句。在开头使用小写字母命名方法是一个很好的做法。

关于java - 如何通过 JPA 持久化从 JTable 检索的实体对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14697224/

相关文章:

java - 有没有办法在特定类的子类中强制使用特定的 Java 注释

java - (java) 应用程序启动时 GUI 偶尔卡住

java - 为什么鼓励 java hibernate 映射对象成为 POJO 对象?

java - JPA 保留的 OffsetDateTime 相差 2 小时

java - 如何评论 (javadoc) NamedQueries

java - NoSuchBeanDefinitionException 预计至少有 1 个 bean 有资格作为此依赖项的 Autowiring 候选者

java - 将 FloatBuffer[] 转换为 byte[]

java - 从给定的表单中提取值

java - 如何将渲染器设置为 jtable 上的复选框?

java - 在非 AWT 线程中更新 AbstractTableModel 中的数据的最佳实践