我使用JPA EntityManager将项目插入MySQL数据库,我有代码读取文件,收集数据,然后将该数据添加到相应的文件中。我写的是我试图做的简化版本,我很欣赏100%,这使得我更难理解我实际在做什么并且可能隐瞒错误的来源,谢谢你对我的关心。我使用的对象p是先前生成的,是一个表单
的LinkedHashMap LinkedHashMap<String MyObject>
Where&#34; MyObject&#34;是一个具有多个属性的类,如&#34; name&#34;,&#34; weight&#34;,&#34; color&#34 ;, String是一个UUID,用作主键。
private final EntityManagerFactory emf = Persistence.createEntityManagerFactory(myUI.PERSISTENCE_UNIT);
private final EntityManager em = emf.createEntityManager();
for (String key : p.keySet()) {
databaseWriter.writeToDatabase(em, key, p.get(key).getName(),
p.get(key).getColor(), p.get(key).getWeight();
}
来自&#34; databaseWriter.writeToDatabase&#34;的相关代码是
public void writeToDatabase (EntityManager em, String id, String name,String Color, String weight) {
em.GetTransaction().begin();
MyObjectTable mt = new MyObjectTable();
mt.setId(id);
mt.setColor(color);
mt.setWeight(weight);
mt.setName(name);
em.persist(mt);
em.getTransaction().commit();
}
我已经确认我以正确的形式生成对象并正确地将信息传递给函数,但我有最奇怪的行为。假设&#34; p&#34;中有15个项目,它只会添加其中的一些,并且它与它添加的少数几个不一致,并且它甚至不一致有多少&#34;少数&#34; ;是。我希望它,因为我在这里做了一些愚蠢的EntityManager。
如果您需要更多详细信息,我很乐意提供它们,我无法想象只会添加一些对象(并且添加的对象具有正确的信息) ),但只有少数,在后续尝试中不是相同的几个,并且根本没有错误弹出。
编辑:我使用的jpa提供程序是EclipseLink,我用我错过的东西给工厂编辑了
编辑:这里有一个eclipse服务器日志,它输入的一段数据没有显示在数据库中,任何人都可以从中收集任何内容吗?
[EL Finest]: query: 2016-09-14 12:18:23.867--UnitOfWork(1915196068)--Thread(Thread[http-nio-8084-exec-252,5,main])--Execute query InsertObjectQuery(com.myfiles.stuff_the.PartTable[ idPart=99a26bca-d818-4959-a328-75c1f05a1e38 ])
[EL Fine]: sql: 2016-09-14 12:18:23.867--ClientSession(1291663611)--Connection(1232332820)--Thread(Thread[http-nio-8084-exec-252,5,main])--INSERT INTO PartTable (idPart, dateCreated, description, hash, isBasic, lastModified, name, riskGroup, authorId, formatId, nucseqId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [99a26bca-d818-4959-a328-75c1f05a1e38, 2016-09-14 12:18:23.82, , null, 1, 2016-09-14 12:18:23.82, AXL2 mRNA, null, 1, null, d6f807f0-ac91-4421-8ff2-4940706fd5bb]
我查看了整个日志文件,无法找到任何错误,有正确数量的persist()和commit()语句,并不确定是什么进行的。
答案 0 :(得分:0)
事实证明问题没有以下一行
em.clear();
我使用了提交
之后