Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 数据库连接边界与事务边界_Spring_Jpa_Transactions_Spring Transactions - Fatal编程技术网

Spring 数据库连接边界与事务边界

Spring 数据库连接边界与事务边界,spring,jpa,transactions,spring-transactions,Spring,Jpa,Transactions,Spring Transactions,我的问题是DB连接边界与事务边界 我不是在问,把@transactional注释放在哪里。我需要知道 甚至对已执行的@transactional方法进行编码,之后也使用db连接/锁定或 不 故事 我面临的一个问题是,我的一个项目消耗了大量的数据库连接。当网络流量很高时,它们不会发布。 因此,我需要了解事务性注释使用的最佳实践。 此外,我还需要详细说明与@Transactional|的锁/DB连接 什么是数据库连接?什么是锁?两者都平等吗? 我问的是锁获取的问题。锁何时获取,何时释放 我有两种

我的问题是DB连接边界与事务边界

我不是在问,把@transactional注释放在哪里。我需要知道 甚至对已执行的@transactional方法进行编码,之后也使用db连接/锁定或 不

故事
我面临的一个问题是,我的一个项目消耗了大量的数据库连接。当网络流量很高时,它们不会发布。 因此,我需要了解事务性注释使用的最佳实践。 此外,我还需要详细说明与@Transactional|的锁/DB连接

什么是数据库连接?什么是锁?两者都平等吗? 我问的是锁获取的问题。锁何时获取,何时释放

我有两种方法从事务方法返回数据

  • 保存并返回实体

  • 保存并返回DTO

从DB连接/锁的角度考虑,哪种方法更好

控制器层 服务层

========================

@Service
public class QuoteService {
   @Transactional
    public SampleClass4 saveAllGetSampleClass4(Long quoteId, Long userId) {        

        SampleClass1 sampleClass1 = new SampleClass1();
        sampleClass1.setQuoteId(quoteId);
        sampleRepository1.saveAndFlush(sampleClass1);


        SampleClass2 sampleClass2 = new SampleClass2();
        sampleClass2.setQuoteId(quoteId);
        sampleRepository2.saveAndFlush(sampleClass2);


        SampleClass3 sampleClass3 = new SampleClass3();
        sampleClass3.setQuoteId(quoteId);
        sampleRepository3.saveAndFlush(sampleClass3);


        SampleClass4 sampleClass4 = new SampleClass4();
        sampleClass4.setQuoteId(quoteId);
        sampleClass4=sampleRepository4.saveAndFlush(sampleClass4);

    }

   @Transactional
    public SampleClass4DTO saveAllGetSampleClass4DTO(Long quoteId, Long userId) {        

        SampleClass1 sampleClass1 = new SampleClass1();
        sampleClass1.setQuoteId(quoteId);
        sampleRepository1.saveAndFlush(sampleClass1);


        SampleClass2 sampleClass2 = new SampleClass2();
        sampleClass2.setQuoteId(quoteId);
        sampleRepository2.saveAndFlush(sampleClass2);


        SampleClass3 sampleClass3 = new SampleClass3();
        sampleClass3.setQuoteId(quoteId);
        sampleRepository3.saveAndFlush(sampleClass3);


        SampleClass4 sampleClass4 = new SampleClass4();
        sampleClass4.setQuoteId(quoteId);

        sampleClass4=sampleRepository4.saveAndFlush(sampleClass4);
        SampleClass4DTO dto=SampleClass4DTO.valueOf(sampleClass4);
        return dto; 

    }

}

这回答了你的问题吗@mohammedkhan不,我不是在问,把事务注释放在哪里。我需要知道执行的事务方法的代码,然后还要知道它是否使用db连接/锁?
@Service
public class QuoteService {
   @Transactional
    public SampleClass4 saveAllGetSampleClass4(Long quoteId, Long userId) {        

        SampleClass1 sampleClass1 = new SampleClass1();
        sampleClass1.setQuoteId(quoteId);
        sampleRepository1.saveAndFlush(sampleClass1);


        SampleClass2 sampleClass2 = new SampleClass2();
        sampleClass2.setQuoteId(quoteId);
        sampleRepository2.saveAndFlush(sampleClass2);


        SampleClass3 sampleClass3 = new SampleClass3();
        sampleClass3.setQuoteId(quoteId);
        sampleRepository3.saveAndFlush(sampleClass3);


        SampleClass4 sampleClass4 = new SampleClass4();
        sampleClass4.setQuoteId(quoteId);
        sampleClass4=sampleRepository4.saveAndFlush(sampleClass4);

    }

   @Transactional
    public SampleClass4DTO saveAllGetSampleClass4DTO(Long quoteId, Long userId) {        

        SampleClass1 sampleClass1 = new SampleClass1();
        sampleClass1.setQuoteId(quoteId);
        sampleRepository1.saveAndFlush(sampleClass1);


        SampleClass2 sampleClass2 = new SampleClass2();
        sampleClass2.setQuoteId(quoteId);
        sampleRepository2.saveAndFlush(sampleClass2);


        SampleClass3 sampleClass3 = new SampleClass3();
        sampleClass3.setQuoteId(quoteId);
        sampleRepository3.saveAndFlush(sampleClass3);


        SampleClass4 sampleClass4 = new SampleClass4();
        sampleClass4.setQuoteId(quoteId);

        sampleClass4=sampleRepository4.saveAndFlush(sampleClass4);
        SampleClass4DTO dto=SampleClass4DTO.valueOf(sampleClass4);
        return dto; 

    }

}