@Transactional使用spring mvc和hibernate无法正常工作

时间:2017-03-22 08:01:08

标签: spring hibernate spring-mvc spring-aop spring-transactions

我已经尝试了很多但是@Transactional仍然没有用。 我已经审阅了很多,但我仍然没有找到任何正确的答案

我想在两个不同的表中插入相同的记录,并且无所不能。 意味着如果在一个表中插入数据时出现问题,则它必须从已插入的表中回滚。因此,对于任何问题,必须在两个表中插入或回滚数据。

请有人帮助我......

package com.cds.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.cds.service.SaveEmployeeService;
import com.cds.vo.EmployeeVo;


@Controller
public class SpringHibernateController {

    @Autowired
    SaveEmployeeService saveEmployeeService;

    @RequestMapping("home")
    public String showHomePage(){
        return "home";
    }

    @RequestMapping("form")
    public String showFormPage(){
        return "form";
    }

    @RequestMapping("submit")
    public String saveEmployeeFromData(@ModelAttribute("employee") EmployeeVo employeeVo,RedirectAttributes redirectAttributes){
        try{    
            saveEmployeeService.saveEmployeeAndCustomer(employeeVo);
            redirectAttributes.addFlashAttribute("success","Saved In Both Tables Successfully");
        }catch(Exception e){
            e.printStackTrace();
            redirectAttributes.addFlashAttribute("unsuccess","Unable To Save In Both Tables.. Please Try Again");
        }
        return "redirect:form";
    }

}

这是我的服务类,其中包含使用@Transactional在两个表中插入相同记录但不起作用的方法

@Service
public class SaveEmployeeServiceImpl implements SaveEmployeeService{

    @Autowired
    SaveEmployeeDAO saveEmployeeDAO;

    @Transactional(propagation=Propagation.REQUIRED)
    public void saveEmployeeAndCustomer(EmployeeVo employeeVo){
        int saveEmployee = saveEmployee(employeeVo);
        int saveCustomer = saveCustomer(employeeVo);
        if(saveEmployee==1 && saveCustomer==1){
            System.out.println("saved In both table successfully");
        }else{
            throw new RuntimeException();
        }
    }



    public int saveEmployee(EmployeeVo employeeVo) {
        Employee employee=null;
        try {
            employee=new Employee();
            employee.setName(employeeVo.getName());
            employee.setJobtitle(employeeVo.getJobtitle());
            employee.setSalary(Integer.parseInt(employeeVo.getSalary()));
            employee.setPassword(Integer.parseInt(employeeVo.getPassword()));
            employee.setPhoto(employeeVo.getPhoto().getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return saveEmployeeDAO.saveEmployee(employee);
    }

    public int saveCustomer(EmployeeVo employeeVo) {
        int a=10/0;
        Customer cutomer=null;
        try {
            cutomer=new Customer();
            cutomer.setName(employeeVo.getName());
            cutomer.setJobtitle(employeeVo.getJobtitle());
            cutomer.setSalary(Integer.parseInt(employeeVo.getSalary()));
            cutomer.setPassword(Integer.parseInt(employeeVo.getPassword()));
            cutomer.setPhoto(employeeVo.getPhoto().getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return saveEmployeeDAO.saveCustomer(cutomer);
    }

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


</web-app>

的applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
 xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context-4.0.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
                           http://www.springframework.org/schema/tx 
                            http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

<!-- 
<context:component-scan base-package="com.cds">
        <context:exclude-filter type="regex" expression="com.cds.controller.*"/>
    </context:component-scan>
     -->
//I have tried with above scan also but still its not working

 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
        <property name="user" value="root"></property>
        <property name="password" value="admin"></property>
         <property name="acquireIncrement" value="5" />
        <property name="initialPoolSize" value="20"></property>
        <property name="maxPoolSize" value="1000"></property>
    </bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan">
            <list>
                <value>com.cds.model</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
             </props>
        </property>
    </bean>

   <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> 

    </beans>

调度-servlet.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
 xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context-4.0.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
                           http://www.springframework.org/schema/tx 
                            http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">


<context:component-scan base-package="com.cds.controller"/>
<mvc:annotation-driven /> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix"> <value>/WEB-INF/pages/</value></property>
        <property name="suffix"> <value>.jsp</value></property>
</bean>

  <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    </bean>

 </beans>

0 个答案:

没有答案