Я пытаюсь работать с Hibernate и Spring DataSourceTransactionManager для обработки функций фиксации и откат, но, вероятно, я ничего не получу.Hibernate и Spring DataSourceTransactionManager
Перед использованием Spring DataSourceTransactionManager, это был один из моего класса DAO
package com.springgestioneerrori.DAO;
public class UtenteDAO extends DAOBase{
public void salvaUtente(Utente utenteIn) throws DAOException{
Session session = getHibernateSession(); //from this method I get Hibernate SessionFactory
try{
session.beginTransaction();
session.saveOrUpdate(Object);
session.getTransaction().commit();
}
catch(Exception e){
session.getTransaction().rollback()
}
}
}
Это класс, который дает мне SessionFactory
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new AnnotationConfiguration().configure().buildSessionFactory();
}
catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
public Session getHibernateSession(){
Session session = HibernateUtil.getSessionFactory().openSession();
return session;
}
Теперь я пытаюсь использовать DataSourceTransactionManager в декларативной путь. После некоторых примеров в Интернете, я писал:
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="salvaUtente"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="userDaoTxPointcut" expression="execution(* com.springgestioneerrori.DAO.UtenteDAO.salvaUtente(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="userDaoTxPointcut" />
</aop:config>
Теперь, что я должен написать внутри метода salvaUtente() для выполнения множества вставок, например, как эти
session.saveOrUpdate(User);
session.saveOrUpdate(UserCredentials);
session.saveOrUpdate(UserOtherDetails);
и изготовление рукоятки пружины и откат?
Что такое единичная работа? Все вставки представляют собой единицу работы, или номер вставки 3 должен происходить независимо от других вставок. –
Все вставки связаны друг с другом, если одна вставка не работает, другие вставки не должны иметь никакого эффекта. – MDP