2012-07-26 3 views
2
@SuppressWarnings("unchecked") 
//@Override 
public SerialNumber getCounter(String id) { 
    Session cs = sessionFactory.getCurrentSession();  
    SerialNumber sn = (SerialNumber) cs.get(SerialNumber.class, id); 
    if (sn == null) { 
     //TODO Throw an error (maybe). The code below creates a new Serial number counter 
     log.debug("NO Serial Number for: " + id + " was found."); 
     sn = new SerialNumber(); 
     sn.setSerialNumberId(id); 
     sn.setName("Unspecified"); 
     sn.setValue(0); 
    } 
    sn.setValue(sn.getValue()+1); 
    cs.saveOrUpdate(sn); 
    cs.close(); 
    return sn; 
} 

Cette ligne est ignorée et enregistre rien à la base de données (MySQL):SaveOrUpdate ne répond pas. Pourquoi?

cs.saveOrUpdate(sn); 

Toutes les idées pourquoi? Je n'ai pas la moindre idée.

Je ne suis en aucun cas Java gourou, mais même le gourou Java ici ne peut pas comprendre. Toute aide serait appréciée.

Merci.

Répondre

2

Il est possible que les mises à jour sont reportés à la session. Essayez:

cs.flush(); 

Si ceci est votre problème, vous pouvez définir cette AUTO dans vos propriétés:

<prop key="org.hibernate.FlushMode">AUTO</prop> 
2

Essayez avec

Transaction tx = null; 
try{ 
tx = session.beginTransaction(); 
    //your code to save 
tx.commit(); 
}catch(Exception ex){ 
    tx.rollBack(); 
    ex.printstacktrace(); //log to see if there is any other error 
} 
+1

Oui, sauf que vous devriez essayer de rester loin de l'écriture de code comme celui-ci et utiliser à la place Annotation- gestion des transactions pilotée lorsque cela est possible. –