2010-07-12 7 views
0

je la méthode suivante dans ma couche DAO d'application Java:brisé Hibernate Enregistrer méthode

public void save(Employee emp) { 
    System.out.println("emp type: " + emp.getClass().getName); 
    getHibernateTemplate().save(emp); 
    System.out.println("object saved!"); 
    System.out.flush(); 
} 

La classe employé ne couvre pas de toute autre classe et a le fichier HBM suivant:

<hibernate-mapping>  
<class name="org.myCompany.Employee" table="employee"> 
<!-- fields omitted to save space --> 
</hibernate-mapping> 

Pourtant, l'insertion échoue avec une exception java.lang.ClassCastException. Au début, je pensais que quelque chose ne va pas avec mon mapping (comme un mappage entier à un booléen) mais je me suis tourné sur le débogage show_sql de mise en veille prolongée et a trouvé ce qui suit dans mon fichier journal:

type emp: org.myCompany. employé
Mise en veille prolongée: insérer dans le client (.......) valeurs (......)
java.lang.ClassCastException

Pourquoi at-il choisir une table tout à fait au hasard pour insérer dans? Je suis sûr que je dois avoir un fichier de configuration mal configuré, mais je ne sais pas lequel. J'ai vérifié les éléments suivants:

  • applicationContext-hibernate.xml -> à la fois les objets clients et les employés sont mis en correspondance avec leurs fichiers hbm corrects
  • ni client ou employé ont une relation d'héritage (il n'y a même pas une commune classe parent comme Personne ou Utilisateur)

Que puis-je essayer d'autre?

+1

Afficher la pile complète, s'il vous plaît. – axtavt

Répondre

0

Dans la classe d'appel, j'ai les deux appels suivants:

UserDAO.saveCustomer(customer); 
UserDAO.saveEmployee(employee); 

Je pensais que l'objet client épargnait correctement. J'ai même mis une déclaration de débogage entre les deux appels et la méthode de débogage imprimée. Toutefois, en commentant la ligne UserDAO.saveCustomer a résolu le problème. Cela m'a fait examiner de plus près l'objet client et j'ai constaté qu'il était corrompu (mauvaise classe). Hibernate doit avoir mis en cache l'instruction d'insertion jusqu'à la fin de la transaction.

Ce problème est maintenant résolu.

+0

Vous devriez éditer votre question au lieu de poster une réponse, généralement –

Questions connexes