13 java hibernate jpa spring-boot
我正在学习如何使用 JPA 和 Hibernate 以及 MySQL 数据库创建 REST API,我看到了这个 @Transactional 注释。有人能解释一下这个注解有什么用吗?
例如我有这个简单的 DAO 类:
@Repository
public class EmployeeDAOHibernateImpl implements EmployeeDAO {
// define field for entitymanager
private EntityManager entityManager;
// set up constructor injection
@Autowired
public EmployeeDAOHibernateImpl(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Override
@Transactional
public List<Employee> findAll() {
// get the current hibernate session
Session currentSession = entityManager.unwrap(Session.class);
// create a query
Query<Employee> theQuery =
currentSession.createQuery("from Employee", Employee.class);
// execute query and get result list
List<Employee> employees = theQuery.getResultList();
// return the results
return employees;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以看到用于 findAll() 方法的 @Transactional,但是如果我删除这个 @Transactional,我会得到相同的输出……那么这个 @Transactional 有什么用?
Pij*_*rek 28
@Transactional 当您希望在事务中执行某个方法/类(= 里面的所有方法)时,可以使用注解。
假设用户A想向user转账 100$ B。发生的事情是:
让我们假设在成功之后1)和执行之前抛出异常2)。现在我们会有一些不一致,因为A失去了 100 美元而B什么也没得到。交易意味着全有或全无。如果方法中某处抛出异常,则更改不会保留在数据库中。所谓的rollback事情发生了。
如果不指定@Transactional,每个数据库调用将在不同的事务中。
Dav*_*INO 21
通常,@Transactional注释是在服务级别编写的。
它用于将数据库上的多个写入组合为单个原子操作。
当有人调用带有@Transactional 所有或不执行数据库写入注释的方法时。
在读取操作的情况下,它没有用,因此它是在单个原子写入的情况下。您在单次读取(选择)中使用它,因此添加或删除@Transactional注释没有影响。
| 归档时间: |
|
| 查看次数: |
26047 次 |
| 最近记录: |