2016-09-14 4 views
1

Ich verwende JPA EntityManager, um Elemente in eine MySQL-Datenbank einzufügen, ich habe Code, der Dateien liest, sammelt Daten und fügt diese Daten dann der entsprechenden Datei hinzu. Was ich schreibe, ist eine vereinfachte Version dessen, was ich versuche zu tun, und ich schätze 100%, dass es beide schwieriger macht zu verstehen, was ich tatsächlich mache und die Ursache des Fehlers verbergen könnte, also danke für das Tragen mit mir. Das Objekt p ich früher erzeugt und ist ein LinkedHashMap der FormJPA EntityManager inkonsistent Objekte zur Datenbank hinzufügen

LinkedHashMap<String MyObject>

Wo „MyObject“ ist eine Klasse, die mehrere Attribute wie „Name“, „Gewicht“, „Farbe“ hat, und die String ist eine UUID, die als Primärschlüssel dienen soll.

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

Und der relevent Code von „databaseWriter.writeToDatabase“ ist

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

ich bestätigt habe ich die Objekte in der richtigen Form zu erzeugen und die Informationen an die Funktion richtig vorbei, aber ich habe das seltsamste Verhalten. Angenommen, es gibt 15 Elemente in "p", Es werden nur einige von ihnen hinzugefügt, und es ist nicht konsistent über die wenigen, die es hinzufügt, und es ist nicht konsistent darüber, wie viele "einige" sind. Ich hoffe es, weil ich mit EntityManager etwas Dummes mache, das hier offensichtlich ist.

Wenn Sie mehr Details benötigen, werde ich sie Ihnen gerne zur Verfügung stellen. Ich kann mir nicht vorstellen, was dazu führen würde, dass nur einige Objekte hinzugefügt werden (und die hinzugefügten Objekte die richtigen Informationen haben) nur ein paar, nicht die gleichen paar bei den folgenden Versuchen, und überhaupt keine Fehler auftauchen.

Edit: Die JPA-Provider ich verwende sind Eclipse und ich habe die Fabrik mit etwas, was ich verpasst

bearbeiten eddited: hier ist ein Beispiel ein Eclipse-Serverprotokoll von einem Stück von Daten eingegeben wird, die nicht angezeigt werden Kann man in der Datenbank irgendwas davon lesen?

[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] 

Ich habe durch die gesamte Log-Datei angesehen und finde keine Fehler gibt es die richtige Anzahl von persistieren() und commit() Aussagen, nicht wirklich sicher, was los ist.

+1

das ist, was eine JPA-Provider-Log für –

+0

ist Ich bin neu zur Verwendung von JPA die folgenden Zeile nicht hat, was ist ein Anbieterprotokoll und wie kann ich es anzeigen? – mstorkson

+0

Sie haben eine JPA-Implementierung (Hibernate, EclipseLink, DataNucleus, OpenJPA?) Als JPA-Provider ausgewählt. Ihre Software erstellt ein Protokoll. Suchen Sie in der Dokumentation nach der von Ihnen ausgewählten Software. –

Antwort

0

Es stellt sich heraus das Problem

em.clear();

nachdem ich begehen verwendet

+0

müssen Sie die Sitzungsflush auch in der JPA überprüfen. Flushing-Strategie ist auch sehr wichtig. – Acewin

Verwandte Themen