2016-09-14 80 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

相關問題