Hibernate erhält keine korrekten Datensätze mit query.list ();

7

Ich baue eine Anwendung, die Hibernate und Mysql verwendet. Meine gesamte Datenbank hat 15 -Tabellen.

Hier ist das Problem: Ich fange an, Datensätze in die Datenbank einzufügen und sie mit query.list(); zu betrachten, um die hinzugefügten Datensätze zu erhalten, aber nachdem ich eine Weile "korrekte" Ergebnisse erzielt habe, fange ich an, nicht den letzten Datensatz zu haben addiere es noch einmal und es ist dasselbe (dasjenige, das vor Shows gezeigt wurde, aber nicht das letzte, das ich hinzugefügt habe), ich aktualisiere und ich bekomme die richtigen Datensätze, ich aktualisiere erneut und ich bekomme 32 records statt 43 , I ' Ich benutze keine komplizierten Abfragen, nur eine Select mit einer Bedingung, wie Sie sehen können, das ist wirklich seltsam.

Beachten Sie, dass ich die Objekte speichere und dann sofort lade, also ein Einfüge direkt gefolgt von einer Auswahl (ich weiß nicht, ob das in Mysql Probleme verursachen kann), die Datensätze werden auch perfekt in die Datenbank eingefügt Mysql workbench Ich kann sehen, dass meine Datensätze korrekt in die Datenbank aufgenommen wurden, ich hoffe wirklich, dass jemand mir helfen kann, dies zu debuggen, weil ich keine Fehler bekomme.

Ich verwende Hibernate 4.3.10 und Java Version 1.8.0_131

Hier ist ein Code, der "manchmal" Probleme beim Abrufen der Ergebnisse von einer der Entitäten gibt, die ich verwende:

Eine Liste der Produkte erhalten:

%Vor%

Code zum Einfügen eines Produkts:

%Vor%

Hier ist die Product-Entity-Klasse:

%Vor%

Hier ist meine Hibernate-Konfigurationsdatei:

%Vor%

Bearbeiten: Ich probierte session.flush() und session.clear() , weil ich das Problem mit Einlösen zu tun hatte, aber ich habe immer noch das gleiche Problem, ich fange an zu denken, dass dies ein Problem mit dem Mysql Workbench Server ist .

Es sind fünf Tage vergangen, ich kann nicht glauben, dass niemand in der gesamten Stackoverflow-Community überhaupt die geringste Ahnung hat, das ist so seltsam wie das Problem, das ich habe.

    
Gherbi Hicham 17.07.2017, 20:21
quelle

2 Antworten

0

Ich denke, das zufällige Ergebnis liegt an der fehlenden Transaktionsgrenze für Ihre Select-Anweisung. Laut diesem Hibernate-Dokument sollten Sie

  

Verwenden Sie immer klare Transaktionsgrenzen, auch für schreibgeschützte Operationen

Versuchen Sie, Ihren Code zu ändern und das Ergebnis zu überprüfen.

%Vor%

Eine ausführliche Diskussion könnte sein hier gefunden

    
Rocherlee 27.07.2017 07:03
quelle
0

Es ist definitiv seltsam, dass dies passiert. Auf den ersten Blick scheint der Code in Ordnung zu sein und ich sehe keine Probleme damit, wie Sie die Daten abrufen.

Sie haben erwähnt, dass Sie am Anfang die richtigen Antworten erhalten, aber nach einer Weile werden die falschen Daten zurückgegeben.

Ich denke, das liegt daran, dass Sie jedes Mal eine neue Sitzung erstellen und sie nicht wirklich schließen, wenn Sie fertig sind.

Ändern Sie im Grunde Folgendes:

%Vor%

An:

%Vor%

Wenn Sie openSession () verwenden, müssen Sie das Objekt explizit löschen und schließen. Dies kann die Ursache für Ihr Problem sein.

getCurrentSession () öffnet eine neue Sitzung, wenn eine nicht existiert, und löscht die Sitzung automatisch und schließt die Sitzung, sobald sie fertig ist.

Fügen Sie dies auch Ihrer hibernate.cfg.xml

hinzu %Vor%

Andernfalls werden Ausnahmen auftreten, weil Sie nicht konfiguriert haben, getCurrentSession korrekt zu verwenden.

Versuchen Sie zusätzlich,

aufzurufen %Vor%

stattdessen, wenn Sie den obigen Ansatz nicht verwenden möchten.

Hoffentlich behebt das das Problem!

    
Suraj Kumar 27.07.2017 20:07
quelle

Tags und Links