随笔 - 832  文章 - 2  评论 - 31  阅读 - 167万

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。

posted on   小破孩楼主  阅读(400)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示