java - Spring MVC : Transactional annotation

标签 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
        }

现在我想在插入employeeaddress 表属性时实现Transactional。我在这里有点困惑。该方法上的 @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 吗?

最佳答案

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

您可以结合jdbctemplate here阅读@transactional

关于java - Spring MVC : Transactional annotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13912232/

相关文章:

java - 如何使用 AuthenticationSuccessHandler 将用户重定向到页面?

java - SBT:将输入预应用到 inputKeys

java - 清理 spring/tomcat/jboss 库中的临时文件的正确方法

java - 为什么 UriComponentsBuilder 忽略空查询参数?

java - 无法使用 Spring RestTemplate 将 MultiPartFile 混合的 POST 参数发送到 Rest 服务

Spring OAuth2刷新 token -无法将访问 token 转换为JSON

java - 拦截@RequestHeader 缺少 header 的异常

java - 如何解析日期数字后带有字母的日期

java - 使用 JOGL 和 Android OpenGL 编写可移植的 Java 应用程序

JavaFX + GraalVM + Gluon