2010-12-15 84 views
-1

J'essaie d'enregistrer un enregistrement dans le mysql 5.1 db. Lorsque j'utilise la méthode manager.persist d'entité() ou une fusion(), il ne sauve pas même un enregistrement à db et lorsque je tente d'utiliser la déclaration d'insertion native comme celui-ci l'on jette exceptionLa requête JPA lève l'exception

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

Exception lancée de la ci-dessus la question est

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 

S'il vous plaît aidez-moi !!!!

Merci

+0

pouvons-nous voir plus de la stacktrace? Je suppose que vous appelez executeUpdate sur la requête. Pourquoi utilisez-vous jpa si vous ne sauvegardez pas simplement l'instance de l'employé? Le but de JPA est de ne pas avoir à faire ce que vous faites. – hvgotcodes

+0

Ensuite, comment puis-je sauvegarder ces données. Je veux utiliser entityManager.persist() ou merge() mais il ne sauvegarde pas les données. Souhaitez-vous s'il vous plaît éloignez-vous sur comment puis-je économiser sans JPA? – user509755

+0

En plus de la requête de Bozho pour l'exception complète et stacktrace, il serait probablement utile de publier le code de votre classe 'Employee', en particulier la façon dont vous attribuez les ID, l'implémentation' equals() 'et' hashcode() ' et les contraintes uniques que vous avez définies (le cas échéant). – Mopper

Répondre

3

Bien que je ne peux pas vous aider immédiatement à la requête, parce que vous êtes le plus omettez probablement une partie importante de la stacktrace, j'ai une solution:

Ne pas utiliser des requêtes INSERT HQL . Ce n'est pas la façon dont JPA est censée fonctionner. Au lieu de créer un objet new Emplyee(), qui doit être un @Entity et définir ses attributs, puis entityManager.persist(employee).

Pour que cela fonctionne, vous avez besoin d'une transaction en cours. entityManager.getTransaction().being() commencerait un, et entityManager.getTransaction().commit() le commettrait.

+0

mon dao est @Transactional, donc je ne pense pas que j'ai besoin d'utiliser begin() et commit(). Par ailleurs, persist (employee) n'enregistre pas les données car il génère une exception EntityExist. Maintenant, si je vérifie la db, il n'y a aucun enregistrement. Donc, j'étudie plus loin .... – user509755

+0

Donner l'exception entière. l'ensemble de la pile. Cela a toujours de l'importance. – Bozho