Spring mvc:Transactional annotation

时间:2012-12-17 10:21:50

标签: java spring spring-mvc transactions

我有两张表EmployeeAddress,如下所示:

public class Employee {

    private Integer id;
    private String firstName;
    private String lastName;
    private boolean employeeStatus;
    private Address address;

        //getters setters
    }

public class Address {
    private Integer id;
    private String country;
    private String city;
    private String street;
    private Integer emp_id;
    //getters setters
    }


@Repository("employeeDao")
public class EmployeeDaoImpl implements EmployeeDao {

    private JdbcTemplate jdbcTemplate;

     @Autowired
        public void setDataSource(DataSource dataSource) {
            this.jdbcTemplate = new JdbcTemplate(dataSource);
        }

        @Override
         public void insertEmployee(Employee e)
         {
         String sql = "INSERT INTO tbl_employee (dept_id,firstName,lastName,employeeStatus) values(?,?,?,?,?)";
         this.jdbcTemplate.update(sql,new
                 Object[]{e.getDept_id(),e.getFirstName(),e.getLastName(),e.isEmployeeStatus()});


// INSERT ADDRESS????
         }

   // Other Methods
        }

现在我想在插入Transactionalemployee表属性时实现address。我在这里感到困惑。 @transactional对方法的注释是否完成了所需的工作?到目前为止我明白了。另外,最佳做法是从我插入employee属性的位置插入地址?我还在某处读到,事务应该从服务层实现而不是Dao。在这种情况下如何实现交易?

修改 由于建议在服务层使用@transactional,因此服务层变为:

@Service("employeeService")
@Transactional
public class EmployeeServiceImpl implements EmployeeService{

    @Autowired
    EmployeeDao employeeDao;
    @Autowired
    AddressDao addressDao;

    @Override
    public void insertEmployee(Employee e) {
        employeeDao.insertEmployee(e);
        addressDao.insertAddress(e.address);

    }
}

是执行交易的正确方法吗?任何人都可以解释@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)而不是简单的@Transactional?

1 个答案:

答案 0 :(得分:3)

尽管@Transactional注释可以完成这项工作,但事务通常是在服务级别定义的。这样一个业务调用就在一个事务中,确保一切成功或失败。

你可以结合jdbctemplate here了解@transactional

相关问题