Milos
Milos

Reputation: 66

Spring Transactional not working rollback

I created maven mvc project with Hibernate 4.3.11, Springframework 4 I have made a project without xml configuration, and when I test transactional rollback it write into table, even exception was happend

I do not know why is it happend. Please help...

Here is my project a link for download and help.

And here are my config params and other files. HibernateConfiguration.java

package rs.co.mytest.configuration;


@Configuration
@EnableTransactionManagement
@ComponentScan({ "rs.co" })
@PropertySource(value = { "classpath:application.properties" })
public class HibernateConfiguration {

@Autowired
private Environment environment;

@Bean
public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
    sessionFactory.setDataSource(dataSource());
    sessionFactory.setPackagesToScan(new String[] { "rs.co" });
    sessionFactory.setHibernateProperties(hibernateProperties());
    return sessionFactory;
 }

@Bean
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
    dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
    dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
    dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
    return dataSource;
}

private Properties hibernateProperties() {
    Properties properties = new Properties();
    properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
    properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
    properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
    properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
    properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
   return properties;        
}

@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory s) {
   HibernateTransactionManager txManager = new HibernateTransactionManager();
   txManager.setSessionFactory(s);
   return txManager;
     }

  }

AppInitializer.java

        public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { ApplicationContextConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
        appContext.register(ApplicationContextConfig.class);
        appContext.register(HibernateConfiguration.class);

        ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
                "SpringDispatcher", new DispatcherServlet(appContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");

       }

      } 


DAO Interface and Object 
     @Repository
     public interface MyTableDao {

    public MyTableModel addMyTable(MyTableModel model) throws Exception;
    public void deleteMyTable(Integer id) throws Exception;
    public List<MyTableBean> listMyTable();

    public MyTableModel getMyTable(Integer id);
    public MyTableBean findMyTable(String naziv);


     }


     @Repository("MyTableDao")
     @Transactional
     public class MyTableDaoImpl implements MyTableDao {

    @Autowired
    private SessionFactory sessionFactory;

    private String sqlBean = " select new rs.co.wog.sifrarnik.bean.MyTableBean(" 
            + " t.idMyTable as idMyTable, "
            + " t.naziv as naziv "
            + " )"
            ;

    @SuppressWarnings("unchecked")
    public List<MyTableBean> listMyTable() {

        List<MyTableBean> bean;

        String sql = sqlBean 
                 + " from MyTableModel t "
                 + " order by naziv ";
        Query query = sessionFactory.getCurrentSession().createQuery(sql);

        bean = (List<MyTableBean>) query.list();

        return bean;
    }




    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    public MyTableModel addMyTable(MyTableModel ulazModel) throws Exception{
        MyTableModel model = null;
        Session sess = sessionFactory.openSession();
        Transaction tx = null;
        try{    
                tx = sess.beginTransaction();
                if (null == ulazModel.getIdgrupa_artikla()){
                    model = ulazModel;
                    sessionFactory.getCurrentSession().save(model);
//Here I made Exception, but rollback did not happend using transactional

                    if (model.getIdgrupa_artikla() != null)
                        throw new Exception("My exception");
                } else {
                    model = getMyTable(ulazModel.getIdgrupa_artikla());
                    model.azurirajModel(ulazModel);

                    sessionFactory.getCurrentSession().saveOrUpdate(model);
                }   
                tx.commit();
            }        
         catch (Exception e) {
             e.printStackTrace();
             if (tx!=null) tx.rollback();
             throw e;
         }
         finally {
             sess.close();
         }

        return model;



    }

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    public void deleteMyTable(Integer idMyTable) {
        sessionFactory
                .getCurrentSession()
                .createQuery(
                        "DELETE FROM MyTableModel WHERE idMyTable =:idMyTable "
                                )
                    .setInteger("idMyTable", idMyTable)
                    .executeUpdate();
    }


    @Override
    @Transactional(readOnly = true, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    public MyTableModel getMyTable(Integer idMyTable) {
        if ((idMyTable == null ))
            return null;

        MyTableModel tmpMyTable = null;

        String sql = 
                 " from MyTableModel "
                + " where idMyTable = :idMyTable ";
        try {

            tmpMyTable = (MyTableModel) sessionFactory.getCurrentSession()
                    .createQuery(sql)
                    .setInteger("idMyTable", idMyTable)
                    .uniqueResult();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return tmpMyTable;

    }

    @Override
    @Transactional(readOnly = true, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    public MyTableBean findMyTable(String naziv) {
        if (naziv == null)
            return null;

        MyTableBean tmpMyTable = null;

        String sql = sqlBean 
                 + " from MyTableModel t "
                 + " where t.naziv = :naziv ";
        try {
            tmpMyTable = (MyTableBean) sessionFactory.getCurrentSession()
                    .createQuery(sql)
                    .setString("naziv", naziv)
                    .uniqueResult();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return tmpMyTable;

     }

     }

Service interface and object

public interface MyTableService {

public MyTableBean addMyTable(MyTableBean bean) throws Exception ;
public void deleteMyTable(Integer IdMyTable)  throws Exception ;
public List<MyTableBean> listMyTable();

public MyTableBean getMyTable(Integer IdMyTable);
public MyTableBean findMyTable(String naziv);



 }


 @Service("MyTable")
 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
 public class MyTableServiceImpl implements MyTableService{
@Autowired
private MyTableDao MyTableDao;

@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public MyTableBean addMyTable(MyTableBean bean) throws Exception {
    MyTableModel model = new MyTableModel(bean);
    return new MyTableBean(MyTableDao.addMyTable(model));
}

public void deleteMyTable(Integer Iduser) throws Exception {
    MyTableDao.deleteMyTable(Iduser);
}

@Override
public List<MyTableBean> listMyTable() {
    return MyTableDao.listMyTable();
}

@Override
public MyTableBean getMyTable(Integer id) {
    MyTableModel model = MyTableDao.getMyTable(id);
    if (null == model)
        return null;
    return new MyTableBean(model);
}

@Override
public MyTableBean findMyTable(String username) {
    return MyTableDao.findMyTable(username);
}   


 }

Controller

@Controller
@RequestMapping("/")
public class AppController {

    @Autowired
    private MyTableService MyTableService;

    @Autowired 
    private MyTableValidator MyTableValidator;


    @ModelAttribute("locale")
    public Locale locale(ModelAndView model ){
        Locale l = new Locale("en_US");
        model.addObject("locale",  l );
        return l;
    }   

    // ////////////////// ovaj init binder je vezan za metodu save
    @InitBinder
    public void registerDateBinder(WebDataBinder binder, 
            Locale locale) {
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        binder.registerCustomEditor(Date.class, new CustomDateEditor(
                dateFormat, true));
        DecimalFormat df =new DecimalFormat();
        DecimalFormatSymbols dfs = new DecimalFormatSymbols(locale);
        /****************************************************************************/
        df.setGroupingUsed(true);
        df.setDecimalFormatSymbols(dfs);
        df.setMaximumFractionDigits(32);
        df.setMaximumIntegerDigits(32);
        binder.registerCustomEditor(BigDecimal.class, new CustomNumberEditor(BigDecimal.class,df, true));       
    }


        @ExceptionHandler(IOException.class)
        public ModelAndView handleIOException(IOException ex) {
            ModelAndView model1 = new ModelAndView(new RedirectView("/"));//
            return model1;
        }
        @ModelAttribute("isarchive") 
        public Boolean isarchive(ModelAndView model ){
            Boolean isarchive = false;
            model.addObject("isarchive", isarchive);
            return isarchive;
        }


    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = {"", "/index"}, method = RequestMethod.GET, produces = "text/plain;charset=UTF-8")
    public ModelAndView index(Locale locale,  Principal principal,
            HttpServletRequest request, HttpServletResponse response) {


        MyTableBean formBean = new MyTableBean();
        ModelAndView model = new ModelAndView("index","myTableBean", formBean);//


        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);

        String formattedDate = dateFormat.format(date);

        model.addObject("serverTime", formattedDate );
        model.addObject(locale);

        return model;
    }


    @RequestMapping(value = "/deleteMyTable", method = RequestMethod.POST, produces = "text/plain;charset=UTF-8")
    public @ResponseBody
    String deleteMyTablea(@RequestParam Integer idMyTable) {
        String rezultat = " Obrisano  " + String.valueOf(idMyTable);
        try {
            MyTableService.deleteMyTable(idMyTable);
        } catch (Exception e) {
            rezultat = "Nije obrisana ";
        }
        return rezultat;
    }


        @RequestMapping(value = "saveMyTable", method = RequestMethod.POST, produces = "text/plain;charset=UTF-8")
        public @ResponseBody
        ModelAndView  processSubmit(
                @Valid MyTableBean formBean,
                BindingResult result,
                Locale locale) {

            MyTableValidator.validate(formBean, result);
            if (result.hasErrors()) {
                ModelAndView model = new ModelAndView("index","myTableBean", formBean);//

                model.addObject("idgrupa_artikla", formBean.getIdgrupa_artikla());

                return model;//"MyTableForm";
            }


        ModelAndView model = new ModelAndView(new RedirectView("index"));//

            try {
                    MyTableService.addMyTable(formBean);
            } catch(Exception e){
                   model = new ModelAndView("Greska");//
                   model.addObject("locale", locale);
                   model.addObject("greska_knjizenja", e.toString());
                   e.printStackTrace();
                   return model;
            } finally {

            }

        model.addObject(locale);

        return model;

    }




     }

and pom.xml

     <project xmlns="http://maven.apache.org/POM/4.0.0"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/maven-v4_0_0.xsd">
       <modelVersion>4.0.0</modelVersion>
       <groupId>rs.co</groupId>
     <artifactId>SpringHibernateTransactionalExample</artifactId>
     <packaging>war</packaging>
     <version>0.0.1-SNAPSHOT</version>
     <name>SpringHibernateTransactionalExample Maven Webapp</name>
     <url>http://maven.apache.org</url>



    <properties>
        <springframework.version>4.2.4.RELEASE</springframework.version>
        <springsecurity.version>4.0.4.RELEASE</springsecurity.version>
        <hibernate.version>4.3.11.Final</hibernate.version>
        <mysql.connector.version>5.1.35</mysql.connector.version>


        <apache.tiles>3.0.5</apache.tiles>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mail.version>1.4.7</mail.version>
        <com.fasterxml.jackson.core>2.5.0</com.fasterxml.jackson.core>
        <org.codehaus.jackson>1.9.13</org.codehaus.jackson>


     <org.aspectj-version>1.8.5</org.aspectj-version>
        </properties>

    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${springframework.version}</version>
        </dependency>
     <dependency>
       <groupId>org.beangle.webmvc</groupId>
      <artifactId>beangle-webmvc-core_2.11</artifactId>
      <version>0.3.0</version>
     </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${springsecurity.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${springsecurity.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>${springsecurity.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.3.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.connector.version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.7</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>1.7.1</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>2.4.0a</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.12.1.GA</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.8.1</version>
        </dependency>
     <dependency>
         <groupId>commons-fileupload</groupId>
         <artifactId>commons-fileupload</artifactId>
         <version>1.3.1</version>
     </dependency>
      <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
         <version>2.4</version>
     </dependency>

     <dependency>
         <groupId>org.jfree</groupId>
         <artifactId>jfreechart</artifactId>
         <version>1.0.19</version>
     </dependency>

     <dependency>
         <groupId>org.jfree</groupId>
         <artifactId>jcommon</artifactId>
         <version>1.0.23</version>
     </dependency>
      <dependency>
       <groupId>joda-time</groupId>
       <artifactId>joda-time</artifactId>
       <version>2.7</version>
     </dependency>  
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5</version>
        </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${com.fasterxml.jackson.core}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${com.fasterxml.jackson.core}</version>
    </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${com.fasterxml.jackson.core}</version>
        </dependency>
          <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>${org.codehaus.jackson}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>${org.codehaus.jackson}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-lgpl</artifactId>
            <version>${org.codehaus.jackson}</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-lgpl</artifactId>
            <version>${org.codehaus.jackson}</version>
        </dependency>

        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.2.11</version>
        </dependency>
        <dependency>
            <groupId>javax.xml</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.1.8</version>
        </dependency>

        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-convention-plugin</artifactId>
            <version>2.1.8</version>
        </dependency>

        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-json-plugin</artifactId>
            <version>2.1.8</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-core</artifactId>
            <version>${apache.tiles}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-template</artifactId>
            <version>${apache.tiles}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>${apache.tiles}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-servlet</artifactId>
            <version>${apache.tiles}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j</artifactId>
       <version>2.6</version>
       <type>pom</type>
     </dependency>
       <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.6</version>
       </dependency>
       <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.6</version>
       </dependency>        
       <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.6</version>
    <scope>runtime</scope>
  </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-taglib</artifactId>
    <version>2.6</version>
  </dependency>

  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
    <version>2.6</version>
  </dependency>


        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.5.4</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.mobile</groupId>
            <artifactId>spring-mobile-device</artifactId>
            <version>1.0.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-core</artifactId>
            <version>4.1.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.ws</groupId>
            <artifactId>spring-ws-core</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.0.Final</version>
        </dependency>

     <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.6.0.RELEASE</version>
     </dependency>  
     <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.3.6.Final</version>
    </dependency>

     <!--  kraj jpa persistance -->    

    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <warSourceDirectory>src/main/webapp</warSourceDirectory>
                                <warName>SpringHibernateTransactionalExample</warName>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <finalName>SpringHibernateExample</finalName>
    </build>
     </project>

Upvotes: 0

Views: 395

Answers (1)

Lakatos Gyula
Lakatos Gyula

Reputation: 4150

As we discussed in the comments you are using MyISAM as the storage engine behind your table. Please consider using something else (InnoDB preferred) because MyISAM doesn't support transactions.

https://dev.mysql.com/doc/refman/5.6/en/myisam-storage-engine.html

Upvotes: 1

Related Questions