Spring Data JPA事务支持
一 点睛
Spring Data JPA对所有默认方法都开启了事务支持,且查询类事务默认启用readOnly=true属性。
二 SimpleJpaRepository缩减版源码
@Repository @Transactional(readOnly = true) public class SimpleJpaRepository<T, ID extends Serializable> implements JpaRepository<T, ID>, JpaSpecificationExecutor<T> { ...... @Transactional public void delete(ID id) { ...... } @Transactional public void delete(T entity) { ...... } @Transactional public void delete(Iterable<? extends T> entities) { ...... } @Transactional public void deleteInBatch(Iterable<T> entities) { ...... } @Transactional public void deleteAll() { ...... } @Transactional public void deleteAllInBatch() { ...... } public T findOne(ID id) { ...... } protected Map<String, Object> getQueryHints() { ...... } private JpaEntityGraph getEntityGraph() { ...... } @Override public T getOne(ID id) { ...... } public boolean exists(ID id) { ...... } public List<T> findAll() { ...... } public List<T> findAll(Iterable<ID> ids) { ...... } public List<T> findAll(Sort sort) { ...... } public Page<T> findAll(Pageable pageable) { ...... } public T findOne(Specification<T> spec) { ...... } public List<T> findAll(Specification<T> spec) { ...... } public Page<T> findAll(Specification<T> spec, Pageable pageable) { ...... } public List<T> findAll(Specification<T> spec, Sort sort) { ...... } public long count() { ...... } public long count(Specification<T> spec) { ...... } @Transactional public <S extends T> S save(S entity) { ...... } @Transactional public <S extends T> S saveAndFlush(S entity) { ...... } @Transactional public <S extends T> List<S> save(Iterable<S> entities) { ...... } ...... }
三 源码分析
从源码分析可以看出,SimpleJpaRepository在类级别定义了@Transactional(readOnly = true),而在和save、delete相关的操作重写了@Transactional属性,此时readOnly属性是false,其余查询操作readOnly仍然为true。
分类:
springdata jpa
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!