hibernate a createSQLQuery

Ivan Polák info na infoportal.sk
Středa Únor 18 18:48:08 CET 2009


tak si aj sam odpoviem, snad to niekomu pomoze:

treba nastavit transakcny mechanizmus pomocou AOP nasledovne:

<tx:advice id="txAdvice" transaction-manager="txManager">
      <tx:attributes>
            <tx:method name="get*" read-only="true" propagation="NEVER"/>
            <tx:method name="find*" read-only="true" propagation="NEVER"/>
            <tx:method name="save*" rollback-for="Exception"/>
            <tx:method name="update*" rollback-for="Exception"/>
            <tx:method name="delete*" rollback-for="Exception"/>
            <tx:method name="*"/>
      </tx:attributes>
  </tx:advice>
 
  <tx:annotation-driven transaction-manager="txManager"/>
 
  <aop:config>
          <aop:pointcut id="serviceOperation" expression="execution(* 
com.*.service.impl.*..*ManagerImpl.*(..))"/>
          <aop:advisor advice-ref="txAdvice" 
pointcut-ref="serviceOperation"/>
  </aop:config>

  <bean id="txManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
          <property name="dataSource" ref="dataSource"/>
  </bean>

Ivan

Info  wrote / napísal(a):
> zdravim konferenciu,
>
> pouzivam Hibernate a Spring. potrebujem vykonat jeden update nad DB mimo
> klasickeho pristupu Hibernate pomocou prikazu createSQLQuery:
>
> public void updateZdroj(final Long id) {
>
> final HibernateCallback callback = new HibernateCallback() {
>     	    public Object doInHibernate(final Session session) throws
> HibernateException {
>     	    	session.beginTransaction();
>     	    	int result = session.createSQLQuery("update zdroj set hodnota =
> hodnota + 1 where id = " + id).executeUpdate();
>     	    	session.getTransaction().commit();
>     	    	return result;
>     	    }
>     	  };
>     	  getHibernateTemplate().execute(callback);
> }
>
> tento kod je v triede ZdrojDaoHibernate (implements ZrojDao).
>
> skusal som aj dat
> @Transactional (propagation=Propagation.REQUIRED)
> public interface ZdrojDao extends GenericDao<Carrier, Long> {
>
> aj konktrentne nad funkciu updateZdroj:
> @Transactional (readOnly=false)
> void updateZdroj(Long id);
>
> a skusal som aj dat parameter Hibernate:
>
> <prop key="hibernate.current_session_context_class">thread</prop>
>
> bohuzial nic nepomohlo chyba je vzdy nasledovna:
>
> org.hibernate.HibernateException: No Hibernate Session bound to thread, and
> configuration does not allow creation of non-transactional one here
> 	org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
> 	org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:574)
>
>
> nepoznate niekto presny postup ako pouzivat createSQLQuery?
>
> dakujem
>
> Ivan
>
> ________________________________________________
> Message sent using Webmail 2.7.9
>
>
>   




Další informace o konferenci Konference