JPA EntityManager不一致地将对象添加到数据库

时间:2016-09-14 15:21:47

标签: java mysql jpa

我使用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()语句,并不确定是什么进行的。

1 个答案:

答案 0 :(得分:0)

事实证明问题没有以下一行

em.clear();

我使用了提交

之后