当我在加载方法上使用@Transactional时,MySQL上的哪种锁?

时间:2012-05-20 10:16:39

标签: mysql spring locking transactional

我正在使用Spring,Hibernate / JPA和MySQL5.1 innodb。我有以下代码:

 @Transactional
 public List findUsers(){
     return entityManager.createNamedQuery("findUsers").getResultList();
 }
 @Transactional
 public void findUserAndUpdate(Long userId){
     User user = entityManager.createNamedQuery("findUserById").setParameter(1, userId).getSingleResult();
     user.setName("newName");
     entityManager.persist(user);
 }

据我所知,@ Transaction的默认设置是Propagation.Required,隔离级别是ReadCommited。

我的问题是:

  1. 此查询使用哪种锁?或者根本没有锁?

  2. 两种方法中的读取查询有什么区别吗?因为一方有另一方没有保存点。

  3. 如果您能解释交易的整个过程,我感激不尽。我的意思是Spring,Hibernate,JDBC和DBMS都在此过程中存在事务管理问题。他们都参与了吗?或者只有Spring负责交易管理?谁添加了对数据的锁定?

  4. 提前致谢!

0 个答案:

没有答案