2017-04-23 2 views
1

org.springframework.dao.InvalidDataAccessApiUsageException: Ecrire opérations ne sont pas autorisés en mode lecture seule (FlushMode.MANUAL): Mettez votre session en FlushMode.COMMIT/AUTO ou supprimer Marqueur 'readOnly' à partir de la définition de la transaction.Pourquoi je ne peux pas changer FlushMode en veille prolongée

J'ai essayé de le changer en code et en XML à un autre flushmode mais c'est toujours Auto.

hibernatetemplate.getSessionFactory().openSession().setFlushMode(FlushMode.COMMIT); 

et <prop key="org.hibernate.FlushMode">COMMIT</prop>

Répondre

0

en fait je l'ai résolu

final Person object = new Person(id, name, password); 
    hibernateTemplate.execute(new HibernateCallback<Person>() { 

     public Person doInHibernate(Session session) 
       throws HibernateException { 

      session.save(object); 
      session.flush(); 
      return object; 
     } 
    }); 
1

Très probablement vos opérations, certains d'entre eux étant persiting ou la mise à jour des entités, sur la session ne sont pas dans un contexte transactionnel.

Essayez de les enfermer dans:

Session session = hibernatetemplate.getSessionFactory().openSession(); 
Transaction tx = session.beginTrasaction(); 

... 

tx.commit(); 
session.close(); 

Maintenant, quand vous commencez la transaction, le mode de rinçage doit être réglé implicitement COMMIT/AUTO.

+0

en fait je l'ai résolu hibernateTemplate.execute (nouveau HibernateCallback () { @Override utilisateur public doInHibernate (Session sn) lève HibernateException { sn.save (utilisateur); return utilisateur; } }); –

+0

approche assez inhabituelle .. mais si cela a fonctionné .. –

+0

cela a fonctionné et quand j'ai ajouté transactionnel a travaillé aussi –

1

vous pouvez faire l'objet HibernateTemplate et override méthode excute