2010-12-15 18 views
-1

Ich versuche, einen Datensatz in die MySQL 5.1 db zu speichern. Wenn ich Einheit manager.persist() oder fusionieren() -Methode dann ist es nicht einmal einen Datensatz zu db speichern und wenn ich versuche, wie diese nativen Insert-Anweisung zu verwenden, das wirft er AusnahmeJPA-Abfrage löst die Ausnahme aus

Query query = entityManager.createNativeQuery("insert into Employee(firstName,lastName,phone,email) values(?,?,?,?);"); 
    query.setParameter(1, employee.getFirstName()); 
    query.setParameter(2, employee.getLastName()); 
    query.setParameter(3, employee.getPhone()); 
    query.setParameter(4, employee.getEmail()); 

Ausnahme von der geworfen über Frage ist

org.springframework.orm.jpa.JpaSystemException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query 

Bitte helfen Sie mir !!!!

Dank

+0

können wir mehr vom StackTrace sehen? Ich nehme an, dass Sie ExecuteUpdate für die Abfrage aufrufen. Warum verwenden Sie jpa, wenn Sie nicht nur die Mitarbeiterinstanz speichern? Der ganze Sinn von JPA ist es NICHT zu tun, was Sie tun. – hvgotcodes

+0

Wie kann ich dann diese Daten speichern? Ich möchte entityManager.persist() oder merge() verwenden, aber es speichert keine Daten. Würden Sie bitte erläutern, wie ich ohne JPA sparen kann? – user509755

+0

Zusätzlich zu Bozhos Anforderung nach der vollständigen Ausnahme und Stacktrace wäre es wahrscheinlich hilfreich, wenn Sie den Code für Ihre 'Employee'-Klasse veröffentlichen könnten, insbesondere die Art der Zuweisung von IDs, der' equals() 'und' hashcode() 'Implementierung und die eindeutigen Einschränkungen, die Sie definiert haben (falls vorhanden). – Mopper

Antwort

3

Während ich nicht sofort Ihnen mit der Abfrage helfen kann, weil Sie höchstwahrscheinlich einen wichtigen Teil der stacktrace Weglassen, habe ich eine Lösung:

Sie INSERT HQL-Abfragen nicht verwenden . Dies ist nicht die Art, wie JPA funktionieren soll. Erstellen Sie stattdessen ein new Emplyee() Objekt, das ein @Entity sein sollte, und legen Sie seine Attribute fest, dann entityManager.persist(employee).

Damit dies funktioniert, benötigen Sie eine laufende Transaktion. entityManager.getTransaction().being() würde einen beginnen, und entityManager.getTransaction().commit() würde es begehen.

+0

mein Dao ist @Transactional, also glaube ich nicht, dass ich begin() und commit() verwenden muss. Übrigens speichert persistent (Mitarbeiter) keine Daten, weil es eine EntityExist-Ausnahme auslöst. Wenn ich jetzt in die Datenbank einchecke, gibt es überhaupt keine Aufzeichnung. Also untersuche ich es weiter .... – user509755

+0

Gib die ganze Ausnahme. der ganze Stack. Es ist immer wichtig. – Bozho

Verwandte Themen