final修饰的类可以被回滚吗?

1 个回答

  • 许立国
    我疯狂地奔跑,只想为你承担一切的伤害,我竖起了山丘,不愿你看见我丑陋的脸庞。
    `final` 修饰类**和事务回滚(rollback)是两回事**,两者没有直接关系。 ## 1. `final` 修饰类的作用 * **只是**限制这个类**不能被继承**。 * 不会影响这个类的对象能不能参与事务,也不影响事务的提交和回滚行为。 ```java public final class MyEntity { private String name; } ``` 上面这个类只是不能被继承,但它的实例如果被持久化到数据库,事务依然可以回滚对它的修改。 ## 2. 回滚是什么 * **回滚**是事务(Transaction)的功能,由数据库或事务管理器控制,比如 Spring 里的 `@Transactional`。 * 事务回滚的前提是: 1. 在事务中对数据的修改还没提交; 2. 发生异常或者手动调用 `rollback()`。 这和类是不是 `final` 完全没关系。 ## 3. 什么时候会混淆 * 有人会把 **“final 变量不能改”** 和 **“回滚”** 搞混,其实 final 修饰的变量指的是**引用不可变**,不是说它的内容不能改,更不是说它的数据库操作不能撤销。 * 即使是 `final` 修饰的类或对象引用,只要事务没提交,数据库里的改动都能被回滚。 **结论**: `final` 修饰类不影响回滚。回滚是事务控制的范畴,final 是编译时的继承限制,两者互不影响。
    发布于 2025-08-10 00:19 •IP属地 湖北
    举报
    评论
    收藏