2016-09-14 77 views
1

我正在使用JPA EntityManager将项目插入MySQL数据库,我有代码读取文件,收集数据,然后将该数据添加到适当的文件。我正在写的是我正在尝试做的简化版本,我欣赏100%,这使得它更难理解我实际上在做什么,并可能隐藏错误的来源,所以感谢您承担跟我。我用被检体P之前生成,并且是形式的LinkedHashMap中JPA EntityManager不一致地将对象添加到数据库

LinkedHashMap<String MyObject>

其中“MyObject来”是有几个属性,如“名”,“重量”,“色彩”一类,而字符串是一个用作主键的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(); 
} 

而且从“databaseWriter.writeToDatabase”的培训相关的代码是

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(); 
} 

我确认我生成的对象以正确的形式和正确地传递信息的功能,但我有最怪异的行为。假设在“p”中有15个项目,它只会添加其中的一些,并且它对增加的数量不一致,甚至对于“几个”的数量也不一致。我希望它是因为我在这里很明显地用EntityManager做一些愚蠢的事情。

如果您需要更多细节,我会很乐意提供它们,我只是不能认为会导致只添加一些对象(以及添加的对象具有正确的信息),但只有特定的几个,而后来的尝试不是同样的几个,并且根本没有出现任何错误。

编辑:我使用的JPA提供商的EclipseLink,我已经eddited厂里的东西我错过了

编辑:这里是正在进入一个数据的一个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] 

我经历了整个日志文件看,并不能发现任何错误,有正确数量的坚持()和commit()语句,真的不知道是怎么回事。

+1

多数民众赞成JPA提供日志是 –

+0

我是新来使用JPA是什么提供程序日志以及如何查看它? – mstorkson

+0

您选择了一些JPA实现(Hibernate,EclipseLink,DataNucleus,OpenJPA?)作为您的JPA提供程序。他们的软件创建一个日志。查看所选软件的文档。 –

回答

0

原来不具有以下行

em.clear();

问题后,我用提交

+0

你将不得不在JPA中检查会话刷新。 Flushing策略也非常重要。 – Acewin

相关问题